"""架空の追客台帳を使う送信直前判定。外部送信はしない。"""
import csv
from pathlib import Path

ROOT = Path(__file__).parent


def decide(row):
    if row.get("unsubscribe") == "yes":
        return "停止: 配信停止"
    if row.get("reply") == "yes":
        return "停止: 返信済み"
    if row.get("deal_state") in {"lost", "won"}:
        return "停止: 案件終了"
    allowed = {
        "unsubscribe": {"yes", "no"}, "reply": {"yes", "no"},
        "deal_state": {"open", "lost", "won"},
        "delivery_state": {"new", "sent", "uncertain", "claimed"},
        "approval": {"yes", "no"}, "send_basis_checked": {"yes", "no"},
    }
    if any(row.get(key) not in values for key, values in allowed.items()):
        return "保留: 空欄・不明・未定義の状態"
    if any(not row.get(key, "").strip() for key in
           ("owner", "approved_owner", "draft_version", "approved_version")):
        return "保留: 担当・承認版が未記入"
    # 停止情報は承認より優先する。更新不明も安全側で保留する。
    if row["unsubscribe"] == "yes":
        return "停止: 配信停止"
    if row["reply"] == "yes":
        return "停止: 返信済み"
    if row["deal_state"] in {"lost", "won"}:
        return "停止: 案件終了"
    if row["record_state"] != "current":
        return "保留: 台帳の同期未確認"
    if row["send_basis_checked"] != "yes":
        return "保留: 送信根拠未確認"
    if row["owner"] != row["approved_owner"]:
        return "保留: 担当変更"
    if row["draft_version"] != row["approved_version"]:
        return "保留: 承認後に文面変更"
    if row["approval"] != "yes":
        return "保留: 未承認"
    if row["delivery_state"] in {"sent", "uncertain", "claimed"}:
        return "保留: 送信履歴あり・結果要照合"
    return "送信候補: 直前に受信・停止情報を再照合"


with (ROOT / "sample-ledger.csv").open(encoding="utf-8", newline="") as f:
    rows = list(csv.DictReader(f))

for row in rows:
    print(f'{row["case_id"]},{decide(row)}')
