"""statute_collector 나라별 어댑터 패키지 (plan safety-library-1 B-1).

어댑터 계약 (2함수 + 상수):
  JURISDICTION: str  — 어댑터 상수 고정. 코어가 적재 직전 assert (파싱 결과 추론 금지).
  poll_changes(client, watch_rows) -> list[ChangeEvent]  — 개정 감지만 (경량 호출).
  fetch_version(client, act, change) -> list[VersionPayload]  — PR②.
    payload 리스트: primary + annex 각각 자기 version_key (R4-M4).

ChangeEvent.kind: amend / repeal / bootstrap(합성 — PR② 부트스트랩이 amend 와
동일 ingest 경로 재사용, R6-m2).
"""

from dataclasses import dataclass, field


@dataclass
class ChangeEvent:
    """개정 감지 이벤트 — poll_changes 산출물."""
    family_id: str
    kind: str                    # amend / repeal / bootstrap
    new_version_key: str         # KR = MST (법령일련번호)
    title: str
    promulgation_date: str | None = None   # YYYYMMDD
    effective_date: str | None = None      # YYYYMMDD (목록 시행일자 — 조문별 차등 시행 주의)
    revision_type: str | None = None       # 제개정구분명


@dataclass
class VersionPayload:
    """fetch_version 산출물 1건 — primary 또는 annex 각자 자기 version_key (R4-M4).

    전문 1콜 스냅샷 의미론(R7-M3 fixture 판정): 한 응답에서 primary + annex 전부 생성.
    annex version_key = 'MST|{별표번호}-{별표가지번호}' (zero-padded 구조화 필드 그대로 —
    suffix 문자열 파싱 아닌 필드 기반, R7-B1 a 업그레이드).
    """
    law_doc_kind: str            # primary / annex
    version_key: str
    title: str
    content: str                 # 조문/별표 markdown 텍스트
    promulgation_date: str | None = None   # YYYYMMDD (본문 기본정보)
    effective_date: str | None = None      # YYYYMMDD (본문 기본정보 — 목록값과 다를 수 있음)
    annex_label: str | None = None         # '별표1' / '별표5의2' (표시용)
    meta: dict = field(default_factory=dict)
