#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成 UI 预览截图（用于 README 与验收）。"""
import os
import shutil
import sys
import tempfile
from pathlib import Path

os.environ["QT_QPA_PLATFORM"] = "offscreen"
_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(_ROOT))
os.chdir(_ROOT)

from PIL import Image, ImageDraw
from PySide6.QtGui import QPixmap
from PySide6.QtWidgets import QApplication

from comic_asset_manager.db import Database
from comic_asset_manager.library import import_folder
from comic_asset_manager.models import Asset, AssetType, Chapter, Series

OUT = _ROOT / "docs" / "screenshots"
OUT.mkdir(parents=True, exist_ok=True)


def build_data(db: Database, tmp: Path):
    """造一个演示库：1 部系列 + 章节 + 6 页漫画 + 角色 + 剧本 + 音频。"""
    s = db.create_series(Series(name="星舰纪元", author="陈墨", status="ongoing"))
    c1 = db.create_chapter(Chapter(series_id=s.id, volume=1, number=1, title="觉醒"))
    c2 = db.create_chapter(Chapter(series_id=s.id, volume=1, number=2, title="启航"))
    db.create_tag("战斗", "#E74C3C")
    db.create_tag("日常", "#27AE60")
    db.create_tag("主角", "#F39C12")

    palette = [("#1B2A4A", "#E8D5B7"), ("#3D1F2E", "#F0C9A0"), ("#2E4A3D", "#D7E4D0"),
               ("#4A3B1F", "#E4D4B8"), ("#25304A", "#C9D7E8"), ("#3F2E4A", "#DCC9E8")]
    d = tmp / "ep1"
    d.mkdir()

    def hex2rgb(h):
        return tuple(int(h[i:i + 2], 16) for i in (1, 3, 5))

    for i in range(6):
        bg, fg = palette[i]
        p = d / f"第1话_{i+1:02d}.png"
        im = Image.new("RGB", (640, 900), hex2rgb(bg))
        # 画色块模拟分镜
        drw = ImageDraw.Draw(im)
        for j in range(4):
            drw.rectangle([(j % 2) * 320 + 20, j * 220 + 40,
                           (j % 2) * 320 + 320, j * 220 + 240],
                          fill=hex2rgb(fg))
        drw.rectangle([20, 840, 620, 870], outline=(255, 255, 255), width=3)
        im.save(p)

    import_folder(db, d, series=s, series_name="星舰纪元", copy_files=False)
    db.create_asset(Asset(series_id=s.id, chapter_id=c1.id, type=AssetType.SCRIPT,
                          title="第1话「觉醒」剧本",
                          content="# 第1话「觉醒」\n\n## 场景一：舰桥\n\n**主角**：我们真的能赢吗？\n\n**船长**：从来没有人问过这个问题。只有答案。\n\n[切镜：舷窗外，星舰缓缓驶离轨道]",
                          description="开场建立世界观", tags=["主角"]))
    db.create_asset(Asset(series_id=s.id, type=AssetType.CHARACTER, title="艾伦·王 三视图",
                          description="主角，18岁，机甲驾驶员", tags=["主角", "日常"]))
    db.create_asset(Asset(series_id=s.id, type=AssetType.AUDIO, title="主题曲《星尘》",
                          file_path=str(tmp / "nope.mp3"), tags=["日常"]))
    db.create_asset(Asset(series_id=s.id, type=AssetType.NOTE, title="第2话大纲",
                          content="- 反派登场\n- 主角首次驾驶失败\n- 悬念：神秘信号"))


def shot(name: str, widget):
    pix = QPixmap(widget.size())
    widget.render(pix)
    path = OUT / f"{name}.png"
    pix.save(str(path))
    print(f"  ✓ {path}")


def main():
    tmp = Path(tempfile.mkdtemp(prefix="cam_shot_"))
    try:
        app = QApplication([])
        from comic_asset_manager.ui.theme import APP_QSS
        app.setStyleSheet(APP_QSS)

        db = Database(tmp / "lib.db")
        build_data(db, tmp)

        from comic_asset_manager.ui.main_window import MainWindow
        win = MainWindow(db)
        win.resize(1400, 880)
        win.show()
        for _ in range(5):
            app.processEvents()

        # 让缩略图任务跑完
        win._load_page()
        for _ in range(8):
            app.processEvents()
        shot("01-主界面", win)

        # 网格视图空态
        win._filter = None
        win.search.clear()
        win._load_page()
        app.processEvents()

        # 选中第一项显示详情
        if win._page_assets:
            win._on_asset_selected(win._page_assets[0].id)
            app.processEvents()
        shot("02-详情面板", win)

        # 列表视图
        win._switch_view(False)
        app.processEvents()
        shot("03-列表视图", win)

        # 导入对话框
        win._switch_view(True)
        from comic_asset_manager.ui.import_dialog import ImportDialog
        dlg = ImportDialog(db, win)
        dlg.resize(720, 620)
        dlg.show()
        app.processEvents()
        dlg.path_edit.setText(str(tmp / "ep1"))
        dlg._scan()
        app.processEvents()
        shot("04-导入向导", dlg)
        dlg.close()

        # 资产编辑对话框
        from comic_asset_manager.ui.asset_dialog import AssetDialog
        a = db.list_assets(asset_type=AssetType.SCRIPT)[0]
        adlg = AssetDialog(db, win, asset=a)
        adlg.resize(600, 720)
        adlg.show()
        app.processEvents()
        shot("05-编辑对话框", adlg)
        adlg.close()

        # 系列管理
        from comic_asset_manager.ui.series_dialog import SeriesManagerDialog
        sdlg = SeriesManagerDialog(db, win)
        sdlg.resize(760, 540)
        sdlg.show()
        sdlg.list.setCurrentRow(0)
        app.processEvents()
        shot("06-系列管理", sdlg)
        sdlg.close()

        db.close()
    finally:
        shutil.rmtree(tmp, ignore_errors=True)


if __name__ == "__main__":
    main()
