"""Seed admin dan user pertama (owner).

Jalankan setelah migration 005_auth_tables.sql dan sebelum 006_auth_data_migration.sql.

Usage:
    python scripts/seed_admin.py [--username admin] [--email admin@koinkamu.com] [--password admin123]
"""
import sys
import os
import argparse
from datetime import datetime

# Ensure project root is in path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app import create_app
from app.extensions import db
from app.models.admin import Admin
from app.models.user import User
from app.models.user_settings import UserSettings
from app.models.settings import AppSettings


def seed_admin(username, email, password):
    """Buat admin dan user pertama."""
    app = create_app()
    with app.app_context():
        # Cek apakah sudah ada admin
        existing = Admin.query.first()
        if existing:
            print(f'[SKIP] Admin sudah ada: {existing.username} ({existing.email})')
            return

        # 1. Buat Admin
        admin = Admin(
            username=username,
            email=email,
            is_superadmin=True,
            created_at=datetime.utcnow(),
        )
        admin.set_password(password)
        db.session.add(admin)
        db.session.flush()  # get admin.id
        print(f'[OK] Admin dibuat: {username} (id={admin.id})')

        # 2. Buat User dengan data yang sama (agar data existing bisa di-assign)
        user = User(
            username=username,
            email=email,
            display_name=username.capitalize(),
            is_active=True,
            is_approved=True,
            approved_by=admin.id,
            approved_at=datetime.utcnow(),
            created_at=datetime.utcnow(),
        )
        user.set_password(password)
        db.session.add(user)
        db.session.flush()  # get user.id
        print(f'[OK] User dibuat: {username} (id={user.id})')

        # 3. Copy fee settings dari AppSettings ke UserSettings
        fee_keys = [
            ('buy_fee_pct', 'fees'),
            ('sell_fee_pct', 'fees'),
            ('stock_buy_fee_pct', 'fees'),
            ('stock_sell_fee_pct', 'fees'),
            ('stock_us_buy_fee_pct', 'fees'),
            ('stock_us_sell_fee_pct', 'fees'),
        ]
        for key, cat in fee_keys:
            val = AppSettings.get(key)
            if val is not None:
                UserSettings.set(user.id, key, val, cat)
                print(f'  [COPY] {key} = {val}')

        # 4. Copy capital settings
        capital_keys = [
            ('default_capital', 'capital'),
            ('active_capital_pct', 'capital'),
            ('reserve_capital_pct', 'capital'),
            ('stock_default_capital', 'capital'),
            ('stock_active_capital_pct', 'capital'),
            ('stock_reserve_capital_pct', 'capital'),
            ('stock_us_default_capital', 'capital'),
            ('stock_us_active_capital_pct', 'capital'),
            ('stock_us_reserve_capital_pct', 'capital'),
        ]
        for key, cat in capital_keys:
            val = AppSettings.get(key)
            if val is not None:
                UserSettings.set(user.id, key, val, cat)
                print(f'  [COPY] {key} = {val}')

        # 5. Copy display preferences
        UserSettings.set(user.id, 'asset_mode', 'stock', 'display')
        UserSettings.set(user.id, 'color_mode', 'dark', 'display')

        db.session.commit()
        print(f'\n[DONE] Admin + User seed selesai. User ID = {user.id}')
        print('[NEXT] Jalankan migration 006_auth_data_migration.sql')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Seed admin pertama')
    parser.add_argument('--username', default='admin', help='Admin username')
    parser.add_argument('--email', default='admin@koinkamu.com', help='Admin email')
    parser.add_argument('--password', default='admin123', help='Admin password')
    args = parser.parse_args()

    seed_admin(args.username, args.email, args.password)
