#!/usr/bin/env python3
"""依菜單產出一週貼文草稿，並計算字數。平台字數上限請以各平台當日規則為準。"""

from __future__ import annotations

import argparse
import csv
import json
import sys
from pathlib import Path

DAYS = ["週一", "週二", "週三", "週四", "週五", "週六", "週日"]


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()
    with args.input.open(encoding="utf-8-sig", newline="") as handle:
        items = list(csv.DictReader(handle))
    if not items:
        print("菜單是空的。", file=sys.stderr)
        return 1
    posts = []
    for i, day in enumerate(DAYS):
        item = items[i % len(items)]
        allergen = item.get("allergen") or "無特別標示"
        caption = (
            f"{item['item']}。{item['feature']}。"
            f"過敏原資訊：{allergen}。實際供應與價格以店內當日為準。"
        )
        posts.append(
            {
                "day": day,
                "item": item["item"],
                "caption": caption,
                "characters": len(caption),
                "photo_note": "建議用同一餐點的實拍，不要用未授權的圖庫或未標示的生成圖。",
            }
        )
        print(f"{day} {item['item']}（{len(caption)} 字）")
    args.output.parent.mkdir(parents=True, exist_ok=True)
    args.output.write_text(json.dumps(posts, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    return 0


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