#!/usr/bin/env python3
"""
Drama Tracker - 新增演員 CLI
互動式新增演員資料，自動建立 Markdown 檔案
"""

import sys
sys.stdout.reconfigure(encoding='utf-8')

from pathlib import Path
from datetime import datetime

# 專案路徑
BASE_DIR = Path(__file__).parent.parent
DATA_DIR = BASE_DIR / "data" / "persons"


def input_with_default(prompt: str, default: str = "") -> str:
    """帶預設值的輸入"""
    if default:
        result = input(f"{prompt} [{default}]: ").strip()
        return result if result else default
    return input(f"{prompt}: ").strip()


def input_yes_no(prompt: str, default: bool = False) -> bool:
    """是/否輸入"""
    default_str = "y" if default else "n"
    result = input(f"{prompt} (y/n) [{default_str}]: ").strip().lower()

    if not result:
        return default
    return result == 'y'


def create_markdown(data: dict) -> Path:
    """建立 Markdown 檔案"""
    DATA_DIR.mkdir(parents=True, exist_ok=True)

    # 檔名使用演員名稱
    filename = data["name"].replace("/", "-").replace("\\", "-").replace(":", "-")
    filepath = DATA_DIR / f"{filename}.md"

    # 別名處理
    aliases_str = str(data["aliases"]).replace("'", '"') if data["aliases"] else "[]"

    content = f"""---
name: "{data['name']}"
aliases: {aliases_str}
photo_url: "{data['photo_url']}"
is_favorite: {str(data['is_favorite']).lower()}

# 社群帳號
social:
  douyin: "{data['douyin']}"
  instagram: "{data['instagram']}"
  weibo: "{data['weibo']}"
  xiaohongshu: "{data['xiaohongshu']}"

notes: "{data['notes']}"
created_at: {datetime.now().strftime('%Y-%m-%d')}
---

## 個人簡介

{data['bio']}

## 參演作品

```dataview
TABLE
  title as "作品",
  type as "類型",
  rating as "評分",
  watch_status as "狀態"
FROM "projects/drama-tracker/data/works"
WHERE contains(lead_actress, this.file.name) OR contains(lead_actor, this.file.name) OR contains(supporting_cast, this.file.name)
SORT rating DESC
```

## 備註

{data['remarks']}
"""

    filepath.write_text(content, encoding='utf-8')
    return filepath


def main():
    print("=" * 50)
    print("  Drama Tracker - 新增演員")
    print("=" * 50)

    # 基本資訊
    name = input_with_default("\n演員姓名")
    if not name:
        print("演員姓名不能為空！")
        return

    aliases_input = input_with_default("別名/藝名（逗號分隔）")
    aliases = [a.strip() for a in aliases_input.split(",")] if aliases_input else []

    is_favorite = input_yes_no("\n是否為特別喜歡的演員？")

    # 社群帳號
    print("\n社群帳號（可以之後補充）：")
    douyin = input_with_default("抖音")
    instagram = input_with_default("Instagram")
    weibo = input_with_default("微博")
    xiaohongshu = input_with_default("小紅書")

    # 其他
    photo_url = input_with_default("\n照片 URL")
    notes = input_with_default("備註標籤")
    bio = input_with_default("個人簡介")
    remarks = input_with_default("其他備註")

    # 確認
    print("\n" + "=" * 50)
    print(f"演員姓名：{name}")
    if aliases:
        print(f"別名：{', '.join(aliases)}")
    print(f"特別喜歡：{'是' if is_favorite else '否'}")
    if douyin or instagram or weibo or xiaohongshu:
        print("社群帳號：", end="")
        socials = []
        if douyin:
            socials.append("抖音")
        if instagram:
            socials.append("IG")
        if weibo:
            socials.append("微博")
        if xiaohongshu:
            socials.append("小紅書")
        print(", ".join(socials))
    print("=" * 50)

    confirm = input("\n確認建立？(y/n) [y]: ").strip().lower()
    if confirm and confirm != 'y':
        print("已取消")
        return

    # 建立檔案
    data = {
        "name": name,
        "aliases": aliases,
        "is_favorite": is_favorite,
        "douyin": douyin,
        "instagram": instagram,
        "weibo": weibo,
        "xiaohongshu": xiaohongshu,
        "photo_url": photo_url,
        "notes": notes,
        "bio": bio,
        "remarks": remarks,
    }

    filepath = create_markdown(data)
    print(f"\n已建立：{filepath.relative_to(BASE_DIR)}")
    print("可以在 Obsidian 中開啟編輯！")
    print(f"\n提示：在作品中使用 [[{name}]] 來連結到此演員")


if __name__ == "__main__":
    main()
