"""기본 계정(admin, creator) 생성 CLI.

W2-F15: `app.main` lifespan에서 prod로 분리된 기본 계정 bootstrap 경로.
dev/test는 lifespan이 자동 호출하므로 이 CLI는 prod 또는 수동 초기화에만 사용.

사용법 (저장소 루트에서):
    backend/.venv/bin/python backend/scripts/bootstrap_default_users.py

옵션:
    --force-prod   ENVIRONMENT=prod여도 실행 강행 (Settings validator가 정말
                   insecure default를 거부하지 않는 경우에만 의미).
    --dry-run      실제 생성하지 않고 어떤 계정이 만들어질지만 출력.
"""
from __future__ import annotations

import argparse
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / "backend"))


def main() -> int:
    parser = argparse.ArgumentParser(description="Bootstrap default user accounts")
    parser.add_argument("--force-prod", action="store_true")
    parser.add_argument("--dry-run", action="store_true")
    args = parser.parse_args()

    # Codex W2 M2: app.main 전체 대신 startup helper만 import — API regression이
    # emergency bootstrap CLI를 막지 않도록.
    from app.core.config import settings
    from app.core.database import SessionLocal, init_db
    from app.startup.default_users import bootstrap_default_users

    print(f"[bootstrap] ENVIRONMENT={settings.environment}")

    # Codex W2 Low: --dry-run은 prod에서도 허용 (read-only 미리보기).
    if args.dry_run:
        print(f"[bootstrap] dry-run: would create admin={settings.default_admin_username}, "
              f"creator={settings.default_creator_username}")
        return 0

    if settings.environment == "prod" and not args.force_prod:
        print(
            "[bootstrap] ENVIRONMENT=prod 에서는 자동 bootstrap을 건너뜁니다. "
            "정말 실행하려면 --force-prod 플래그를 사용하세요."
        )
        return 2  # distinct exit code: guarded skip (1은 generic error용)

    init_db()
    db = SessionLocal()
    try:
        bootstrap_default_users(db)
        print(f"[bootstrap] done. admin={settings.default_admin_username}, "
              f"creator={settings.default_creator_username}")
    finally:
        db.close()
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
