"""新租户默认种子数据

在 create_tenant 里调用 seed_tenant_defaults(db, tenant_id)，
自动为支付网关、货币、库存状态三张表插入默认行（幂等）。
"""
from sqlalchemy import select, text
from sqlalchemy.ext.asyncio import AsyncSession

_PAYMENT_GATEWAYS = [
    ("windcave",       "Windcave",            "信用卡 / 借记卡（Windcave HPP）",      "💳",  1, 10),
    ("polipay",        "Polipay",             "新西兰网银直付",                        "🏦",  1, 20),
    ("latipay",        "Latipay",             "亚太跨境支付",                          "🌏",  0, 30),
    ("latipay_wechat", "微信支付（Latipay）", "通过 Latipay 聚合的微信扫码支付",       "💚",  0, 31),
    ("latipay_alipay", "支付宝（Latipay）",   "通过 Latipay 聚合的支付宝扫码支付",    "💙",  0, 32),
    ("latipay_polipay","POLi Pay（Latipay）", "通过 Latipay 聚合的新西兰网银直付",    "🏦",  0, 33),
    ("latipay_payid",  "PayID（Latipay）",    "通过 Latipay 聚合的澳洲实时转账",      "🇦🇺", 0, 34),
    ("latipay_upi",    "银联（Latipay）",     "通过 Latipay 聚合的银联 UPI/UPOP",    "🔴",  0, 35),
    ("alipay",         "支付宝",              "Alipay 扫码 / APP 支付",               "💙",  1, 40),
    ("wechat",         "微信支付",            "WeChat Pay 扫码 / APP 支付",           "💚",  1, 50),
    ("paypal",         "PayPal",              "PayPal 国际支付",                       "🅿️", 0, 60),
    ("square",         "Square",              "Square POS / 在线支付",                "⬛",  0, 70),
    ("balance",        "余额支付",            "使用账户余额抵扣",                      "💰",  1, 80),
    ("bank_transfer",  "银行转账",            "手动转账，需人工确认到账",              "🏛️", 1, 90),
]

_STOCK_STATUSES = [
    # slug, name, name_en, allow_purchase, badge_color, badge_text, badge_text_en, is_default, status_type, is_type_default, sort_order
    ("in_stock",     "有货",     "In Stock",     1, "#22c55e", "有货",     "In Stock",     1, "in_stock",     1, 10),
    ("low_stock",    "库存紧张", "Low Stock",    1, "#f59e0b", "库存紧张", "Low Stock",    0, "in_stock",     0, 20),
    ("out_of_stock", "售罄",     "Out of Stock", 0, "#ef4444", "售罄",     "Out of Stock", 0, "out_of_stock", 1, 30),
]


async def seed_tenant_defaults(db: AsyncSession, tenant_id: int) -> None:
    await _seed_payment_gateways(db, tenant_id)
    await _seed_currency(db, tenant_id)
    await _seed_stock_statuses(db, tenant_id)


async def _seed_payment_gateways(db: AsyncSession, tenant_id: int) -> None:
    existing = set(
        row[0] for row in (await db.execute(
            text("SELECT code FROM payment_gateways WHERE tenant_id = :tid"),
            {"tid": tenant_id},
        )).fetchall()
    )
    for code, name, desc, icon, enabled, sort_order in _PAYMENT_GATEWAYS:
        if code not in existing:
            await db.execute(text(
                "INSERT INTO payment_gateways "
                "(tenant_id, code, name, description, icon, enabled, sort_order) "
                "VALUES (:tid, :code, :name, :desc, :icon, :enabled, :sort)"
            ), {"tid": tenant_id, "code": code, "name": name, "desc": desc,
                "icon": icon, "enabled": enabled, "sort": sort_order})


async def _seed_currency(db: AsyncSession, tenant_id: int) -> None:
    count = (await db.execute(
        text("SELECT COUNT(*) FROM currencies WHERE tenant_id = :tid"),
        {"tid": tenant_id},
    )).scalar()
    if not count:
        await db.execute(text(
            "INSERT INTO currencies "
            "(tenant_id, code, name, symbol, exchange_rate, is_default, is_active, rate_mode) "
            "VALUES (:tid, 'CNY', '人民币', '¥', 1.00000000, 1, 1, 'manual')"
        ), {"tid": tenant_id})


async def _seed_stock_statuses(db: AsyncSession, tenant_id: int) -> None:
    existing = set(
        row[0] for row in (await db.execute(
            text("SELECT slug FROM stock_statuses WHERE tenant_id = :tid"),
            {"tid": tenant_id},
        )).fetchall()
    )
    for (slug, name, name_en, allow_purchase, badge_color,
         badge_text, badge_text_en, is_default, status_type, is_type_default, sort_order) in _STOCK_STATUSES:
        if slug not in existing:
            await db.execute(text(
                "INSERT INTO stock_statuses "
                "(tenant_id, slug, name, name_en, allow_purchase, badge_color, "
                "badge_text, badge_text_en, is_system, is_default, status_type, is_type_default, sort_order) "
                "VALUES (:tid, :slug, :name, :name_en, :allow_purchase, :badge_color, "
                ":badge_text, :badge_text_en, 1, :is_default, :status_type, :is_type_default, :sort_order)"
            ), {
                "tid": tenant_id, "slug": slug, "name": name, "name_en": name_en,
                "allow_purchase": allow_purchase, "badge_color": badge_color,
                "badge_text": badge_text, "badge_text_en": badge_text_en,
                "is_default": is_default, "status_type": status_type,
                "is_type_default": is_type_default, "sort_order": sort_order,
            })
