"""主题设置 API

Admin:  GET/PUT  /admin/theme-settings   （需要管理员认证）
Store:  GET      /store/theme-settings    （公开，无需认证）
"""
import copy
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select

from app.api.deps import get_db, get_admin_user, get_tenant_by_domain
from app.core.models.user import User
from app.core.models.theme_settings import ThemeSettings

admin_router = APIRouter(prefix="/admin/theme-settings", tags=["主题定制"])
store_router = APIRouter(prefix="/store/theme-settings", tags=["前台主题"])

DEFAULT_THEME: dict = {
    "colors": {
        "brand":  {"DEFAULT": "#6f5349", "light": "#bfa094", "dark": "#4a3228"},
        "accent": {"DEFAULT": "#c4895a", "light": "#d4a574", "dark": "#a66b3c"},
    },
    "typography": {"font_sans": "DM Sans", "font_display": "Playfair Display", "base_size": 16, "heading_weight": 700},
    "layout":     {"container_max_width": 1280, "header_height": 68},
    "topstrip": {
        "enabled": True,
        "text": {"zh": "新用户首单享 9折优惠 · 全场满 ¥199 包邮", "en": "10% off first order · Free shipping over ¥199"},
        "bg_color": "#4f46e5",
        "text_color": "#ffffff",
        "link_text": {"zh": "查看活动详情", "en": "View Details"},
        "link_url": "/products",
    },
    "hero": {
        "bg_gradient_start": "#1e1b4b",
        "bg_gradient_mid":   "#312e81",
        "bg_gradient_end":   "#1e40af",
        "tag":         {"zh": "🚀 2026 新品发布", "en": "🚀 2026 New Release"},
        "title_line1": {"zh": "极光 X12 Pro", "en": "Aurora X12 Pro"},
        "title_line2": {"zh": "重新定义旗舰", "en": "Redefine Flagship"},
        "desc":        {"zh": "骁龙最新旗舰芯片 · 6000mAh 超长续航\n100W 闪充 · IP68 防水 · 专业影像系统", "en": "Latest Snapdragon flagship chip · 6000mAh ultra-long battery\n100W fast charging · IP68 water-resistant · Professional imaging system"},
        "cta_text":    {"zh": "立即抢购 ¥3,999", "en": "Buy Now ¥3,999"},
        "cta_url":     "/products/jiguang-x12-pro-256gb",
        "cta2_text":   {"zh": "查看规格 →", "en": "View Specs →"},
        "cta2_url":    "/products",
    },
    "sections": [
        {"id": "hero",         "enabled": True,  "order": 0},
        {"id": "trust_bar",    "enabled": True,  "order": 1},
        {"id": "cat_pills",    "enabled": True,  "order": 2},
        {"id": "featured",     "enabled": True,  "order": 3, "config": {"title": {"zh": "🔥 热销爆款", "en": "🔥 Best Sellers"}, "count": 8}},
        {"id": "banners",      "enabled": True,  "order": 4},
        {"id": "latest",       "enabled": True,  "order": 5, "config": {"title": {"zh": "🆕 最新上架", "en": "🆕 Latest Arrivals"}, "count": 8}},
        {"id": "brands_strip", "enabled": True, "order": 6},
    ],
    "product_card": {"columns_desktop": 4, "show_rating": True, "show_badge": True},
}


class ThemeSettingsBody(BaseModel):
    model_config = {"extra": "allow"}


async def _get_or_default(db: AsyncSession, tenant_id: int) -> dict:
    result = await db.execute(
        select(ThemeSettings).where(ThemeSettings.tenant_id == tenant_id)
    )
    row = result.scalar_one_or_none()
    if row and row.settings:
        return row.settings
    return copy.deepcopy(DEFAULT_THEME)


# ── Admin 路由 ────────────────────────────────────────────────────

@admin_router.get("", summary="获取主题配置")
async def get_theme(
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_admin_user),
):
    return await _get_or_default(db, current_user.tenant_id)


@admin_router.put("", summary="保存主题配置")
async def put_theme(
    body: dict,
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_admin_user),
):
    result = await db.execute(
        select(ThemeSettings).where(ThemeSettings.tenant_id == current_user.tenant_id)
    )
    row = result.scalar_one_or_none()
    if row:
        row.settings = body
    else:
        row = ThemeSettings(tenant_id=current_user.tenant_id, settings=body)
        db.add(row)
    await db.commit()
    await db.refresh(row)
    return row.settings


@admin_router.post("/reset", summary="重置为默认主题")
async def reset_theme(
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_admin_user),
):
    result = await db.execute(
        select(ThemeSettings).where(ThemeSettings.tenant_id == current_user.tenant_id)
    )
    row = result.scalar_one_or_none()
    defaults = copy.deepcopy(DEFAULT_THEME)
    if row:
        row.settings = defaults
        await db.commit()
    return defaults


# ── Store 公开路由 ────────────────────────────────────────────────

@store_router.get("", summary="获取主题配置（公开）")
async def get_theme_public(
    db: AsyncSession = Depends(get_db),
    tid: int = Depends(get_tenant_by_domain),
):
    return await _get_or_default(db, tid)
