"""ecourt MCP — 전자소송 조회 도구 (WSL 쪽 FastMCP 서버).

실제 브라우저 조작은 Windows python 이 win_cdp.py 로 한다 (전용 Chrome 포트 9444).
조회만 제공. 서명·제출·결제·삭제는 guard.py 에서 코드로 차단 — 박씨 본인만.
체크리스트: ~/.claude/skills/ecourt-filing/SKILL.md · 사건 자료: ~/ecourt-private/ (이 레포에 두지 않음)
"""
import json
import os
import shutil
import subprocess
import sys

from mcp.server.fastmcp import FastMCP

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from kr_deadline import deadline as _deadline  # noqa: E402

HERE = os.path.dirname(os.path.abspath(__file__))
WIN_PY = "/mnt/c/Users/dtsli/AppData/Local/Programs/Python/Python312/python.exe"
WIN_DIR_WSL = "/mnt/c/Temp/ecourt/bin"
WIN_DIR = r"C:\Temp\ecourt\bin"

mcp = FastMCP("ecourt")


def _run(action: str, args: dict | None = None, timeout: int = 90) -> dict:
    os.makedirs(WIN_DIR_WSL, exist_ok=True)
    for f in ("win_cdp.py", "guard.py"):
        shutil.copy2(os.path.join(HERE, f), os.path.join(WIN_DIR_WSL, f))
    cmd = [WIN_PY, "-W", "ignore", WIN_DIR + r"\win_cdp.py", action, json.dumps(args or {}, ensure_ascii=False)]
    try:
        p = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout, encoding="utf-8")
    except subprocess.TimeoutExpired:
        return {"ok": False, "error": f"{action} {timeout}s 타임아웃"}
    line = [l for l in p.stdout.splitlines() if l.startswith("{")]
    return json.loads(line[-1]) if line else {"ok": False, "error": (p.stderr or p.stdout)[-800:]}


@mcp.tool()
def ecourt_status() -> dict:
    """전자소송 전용 Chrome 상태 — 없으면 띄우고, 현재 URL·로그인 여부·인증서 창 여부를 돌려준다."""
    return _run("status")


@mcp.tool()
def ecourt_open_login(user_id: str = "Think4good") -> dict:
    """로그인 화면 → 아이디 입력 → 로그인 버튼 → 인증서 창까지. 인증서 암호 입력은 박씨 본인."""
    return _run("open_login", {"user_id": user_id})


@mcp.tool()
def ecourt_service_list(period: str = "", appeal_days: int = 0) -> dict:
    """나의전자소송 > 전체송달문서 조회 (읽기 전용, 동석 불필요). 로그인 상태여야 한다.

    period: "" (기본 1개월) | "1주일" | "1개월"
    appeal_days: 0 이 아니면 각 행의 수신일자 기준 마감일을 계산해 붙인다 (예: 보정명령 21일, 항소 14일)
    """
    res = _run("service_list", {"period": period} if period else {})
    if res.get("ok") and appeal_days:
        for it in res.get("items", []):
            if it.get("received"):
                it["deadline"] = _deadline(it["received"], appeal_days)
    return res


@mcp.tool()
def ecourt_deadline(received: str, days: int) -> dict:
    """불변기간 마감 계산 — 수신일(YYYY-MM-DD 또는 YYYY.MM.DD) 다음날 기산 N일째, 토·일·공휴일이면 다음 평일."""
    return _deadline(received, days)


if __name__ == "__main__":
    mcp.run()
