"""SCAT PDF 파싱 데이터 모델."""

from __future__ import annotations

from typing import List, Optional

from pydantic import BaseModel


class SensitiveItem(BaseModel):
    """민감자원 항목."""
    t: str  # 유형 (사회경제적 / 생물자원)
    v: str  # 내용


class PhotoInfo(BaseModel):
    """추출된 사진 정보."""
    filename: str
    page: int
    index: int


class CoastalSection(BaseModel):
    """해안 구간 1건 (PDF 1페이지)."""
    section_number: int = 0
    sect_nm: str = ''           # 지역명
    sect_cd: str = ''           # 코드명 (SSDD-1)
    esi_cd: Optional[str] = None     # ESI 등급 (1, 2, 3, 6A, 6B, 8A, 8B 등)
    esi_num: Optional[int] = None    # ESI 숫자 (1~8)
    shore_tp: Optional[str] = None   # 해안 형태 (폐쇄형/개방형)
    cst_tp_cd: Optional[str] = None  # 해안 구성 (투과성 인공호안, 모래 등)
    len_m: Optional[float] = None    # 해안길이 (m)
    width_m: Optional[float] = None  # 해안 폭 (m, 선택)
    lat: Optional[float] = None       # 위도
    lng: Optional[float] = None       # 경도
    access_dc: Optional[str] = None  # 접근방법 설명
    access_pt: Optional[str] = None  # 주요접근지점
    sensitive_info: List[SensitiveItem] = []  # 민감자원
    cleanup_methods: List[str] = []           # 권장 방제 방법
    end_criteria: List[str] = []              # 권장 방제 중지 기준
    notes: List[str] = []                     # 해안 방제시 고려사항
    photos: List[PhotoInfo] = []              # 추출된 사진


class ParseResult(BaseModel):
    """PDF 파싱 전체 결과."""
    pdf_filename: str
    zone_name: str = ''        # PDF 헤더에서 추출한 구역명
    jurisdiction: str = ''     # 관할 (보령 해양경비안전서 등)
    total_sections: int = 0
    sections: List[CoastalSection] = []
    skipped_pages: int = 0
