#!/usr/bin/env python3
"""依關鍵字做意圖分類，只產出回覆草稿，不向任何平台送出訊息。"""

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path

RULES = [
    ("hours", ("營業", "幾點", "時間", "休息", "假期"), "我們的營業時間請見主頁置頂或官方網站，不便之處請見諒。"),
    ("price", ("價格", "多少錢", "便宜", "折扣", "優惠"), "價格與方案請見置頂說明。這裡先不報未經確認的數字。"),
    ("complaint", ("壞了", "退", "沒收到", "客訴", "抱怨"), "這則涉及訂單或客訴，請轉交人工處理，不要自動結案。"),
]


def classify(text: str) -> dict:
    lowered = text.lower()
    for intent, keywords, draft in RULES:
        if any(key in lowered or key in text for key in keywords):
            return {
                "intent": intent,
                "draft": draft,
                "auto_send": False,
                "needs_human": intent == "complaint",
            }
    return {
        "intent": "other",
        "draft": "已收到訊息，稍後由專人回覆。",
        "auto_send": False,
        "needs_human": True,
    }


def main() -> int:
    parser = argparse.ArgumentParser(description="社群回覆草稿分類器")
    parser.add_argument("input", type=Path)
    parser.add_argument("-o", "--output", type=Path, required=True)
    args = parser.parse_args()
    messages = json.loads(args.input.read_text(encoding="utf-8"))
    results = []
    for item in messages:
        text = item.get("text", "")
        result = classify(text)
        result["id"] = item.get("id")
        result["text"] = text
        results.append(result)
        flag = "需人工" if result["needs_human"] else "僅草稿"
        print(f"{item.get('id')} [{result['intent']}] {flag}")
    args.output.parent.mkdir(parents=True, exist_ok=True)
    args.output.write_text(json.dumps(results, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    print(f"寫出 {len(results)} 筆草稿到 {args.output}。本程式不會連線到任何平台。")
    return 0


if __name__ == "__main__":
    sys.exit(main())
