# -*- coding: utf-8 -*-
"""数据库种子脚本（非运行态）—— 在迁移后、启动应用前执行。

用法：uv run python scripts/db/seed.py
职责：灌入平台/园区/培训的基础种子数据（角色、权限、用户、默认园区、培训事件课程等）。
全部幂等（按标记行判断，重跑安全）。禁止在应用启动时调用本逻辑。
"""
from __future__ import annotations

import asyncio
import logging
import sys
import os
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent))

from app.infrastructure.repositories import Database
from app.infrastructure.seed import seed_data as platform_seed
from app import config

logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
log = logging.getLogger("db.seed")


async def run() -> None:
    db = Database()
    try:
        # 平台种子（角色/权限/用户/政务/OPC/投资人/工作台等，幂等）
        await platform_seed(db.session)
        await db.session.commit()
        log.info("平台种子完成：%s", config.DATABASE_URL)
        # TODO(P2/P3 后)：园区默认园区+企业、培训事件课程 经 serverdata/seed/*.json 灌入（当前由各自子应用迁移后接入）
    except Exception as e:  # noqa: BLE001
        await db.session.rollback()
        log.error("种子失败：%s", e)
        raise
    finally:
        await db.close()


if __name__ == "__main__":
    asyncio.run(run())
