# -*- coding: utf-8 -*-
"""문서 유형별 추출기. 공통 인터페이스: extract(path) -> Document | None.

유형 추가는 모듈 하나 추가 + 아래 분기 한 줄로 끝나야 한다 (CLAUDE.md 구조 원칙).
"""

from __future__ import annotations

from pathlib import Path

from watcher.extract.base import Document


def extract(path: Path) -> Document | None:
    ext = Path(path).suffix.lower()
    if ext == ".dxf":
        from watcher.extract import dxf
        doc = dxf.extract(path)
    elif ext == ".pdf":
        from watcher.extract import pdf
        doc = pdf.extract(path)
    elif ext == ".xlsx":
        from watcher.extract import xlsx
        doc = xlsx.extract(path)
    else:
        # .dwg 바이너리, .docx 등: 파일 수준(해시) 감지만. 추출기는 파일럿 이후 (ROADMAP)
        return None
    # 공통 관문: 깨진 인코딩(서로게이트) 정화 — 어떤 추출기 출신이든 여기서 걸러
    # sqlite 저장·브리핑 쓰기가 죽지 않게 보장한다 (2026-08-27 회사 실파일)
    return doc.sanitized() if doc is not None else None
