#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""漫画资产管理器 · 启动入口。

用法:
    python -m comic_asset_manager.main
    python comic_asset_manager/main.py
    ./start.command           # macOS 双击启动
"""
from __future__ import annotations

import os
import sys


def _make_icon() -> "QIcon":
    """绘制一个简洁的漫画格图标作为应用标识（免外部资源）。"""
    from PySide6.QtCore import Qt, QSize
    from PySide6.QtGui import QIcon, QPixmap, QPainter, QColor, QPen, QBrush

    pm = QPixmap(QSize(256, 256))
    pm.fill(QColor(0, 0, 0, 0))
    p = QPainter(pm)
    p.setRenderHint(QPainter.RenderHint.Antialiasing)
    p.setBrush(QBrush(QColor("#4A90D9")))
    p.setPen(QPen(QColor("#1B1D23"), 6))
    p.drawRoundedRect(12, 12, 232, 232, 40, 40)
    # 分格线（模拟漫画分镜）
    p.setPen(QPen(QColor("#1B1D23"), 10))
    p.drawLine(128, 22, 128, 234)
    p.drawLine(22, 128, 234, 128)
    # 高光
    p.setPen(Qt.PenStyle.NoPen)
    p.setBrush(QBrush(QColor(255, 255, 255, 70)))
    p.drawRoundedRect(30, 30, 88, 88, 18, 18)
    p.end()
    return QIcon(pm)


def main() -> int:
    # 必须在 QApplication 之前导入 Qt（否则高 DPI 策略不生效）
    from PySide6.QtCore import Qt
    from PySide6.QtGui import QFont
    from PySide6.QtWidgets import QApplication

    # 高 DPI 支持
    QApplication.setHighDpiScaleFactorRoundingPolicy(
        Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
    os.environ.setdefault("QT_ENABLE_HIGHDPI_SCALING", "1")

    app = QApplication(sys.argv)
    app.setApplicationName("Comic Asset Manager")
    app.setOrganizationName("ComicAssetManager")

    # 显式指定系统字体：避免 Qt 回退到不存在的 "Sans Serif" 触发字体别名扫描警告
    app.setFont(QFont(os.environ.get("CAM_FONT", ".AppleSystemUIFont"), 13))

    # 窗口图标（用 Qt 绘制，免外部资源文件）
    app.setWindowIcon(_make_icon())

    # 全局样式
    from .ui.theme import APP_QSS
    app.setStyleSheet(APP_QSS)

    # 数据库
    from .db import Database
    db_path = os.environ.get("CAM_DB")
    db = Database(db_path) if db_path else Database()

    # 首次运行欢迎
    first_run = db.stats().get("assets", 0) == 0

    # 主窗口
    from .ui.main_window import MainWindow
    win = MainWindow(db)
    win.show()

    if first_run:
        _welcome(win, db)

    code = app.exec()
    try:
        db.close()
    except Exception:
        pass
    return code


def _welcome(win, db) -> None:
    """首次运行时提示导入。"""
    from PySide6.QtWidgets import QMessageBox
    ans = QMessageBox.question(
        win, "欢迎使用漫画资产管理器",
        "数据库为空。\n\n是否现在导入资产？",
        QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
    )
    if ans == QMessageBox.StandardButton.Yes:
        win.open_import()


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