from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class TemplateSpec:
    template_id: int
    name: str
    layout_mode: str
    photo_box: tuple[int, int, int, int]
    title_size: int
    title_lines: int
    caption_size: int
    caption_lines: int
    caption_limit: int
    caption_y: int
    caption_height: int
    accent: tuple[int, int, int]
    transition_pool: tuple[str, ...]


def _specs():
    from .template_01 import SPEC as template_01
    from .template_02 import SPEC as template_02
    from .template_03 import SPEC as template_03
    from .template_04 import SPEC as template_04
    from .template_05 import SPEC as template_05
    from .template_06 import SPEC as template_06
    from .template_07 import SPEC as template_07
    from .template_08 import SPEC as template_08
    from .template_09 import SPEC as template_09
    from .template_10 import SPEC as template_10
    return {1:template_01,2:template_02,3:template_03,4:template_04,5:template_05,
            6:template_06,7:template_07,8:template_08,9:template_09,10:template_10}


def select_template(request,real_photo_count,floorplan_count,job_id):
    """수동 선택을 우선하고, 자동 선택은 매물 자료에 맞는 후보만 순환한다."""
    specs=_specs();request=request if isinstance(request,dict) else {}
    raw=request.get('template_id') or request.get('shorts_template_id')
    try:manual=int(str(raw).replace('template_','').strip())
    except (TypeError,ValueError):manual=0
    if manual in specs:
        return specs[manual],'manual'
    eligible=[1]
    if int(real_photo_count or 0)>=4:eligible.extend((2,4,5,6,7,8,9,10))
    if int(floorplan_count or 0)>0:eligible.append(3)
    selected=eligible[(max(1,int(job_id))-1)%len(eligible)]
    return specs[selected],'auto'
