import asyncio
import logging
import uuid
from sqlalchemy import select
from app.db.session import SessionLocal
from app.models import (
    User, Person, UserRole, SystemParameter, 
    PointRule, LevelConfig, SubscriptionTier, UserStats
)
from app.core.security import get_password_hash
from app.core.config import settings

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

async def seed_data():
    async with SessionLocal() as db:
        logger.info("🚀 Alapadatok feltöltése biztonságos módban...")

        admin_email = settings.INITIAL_ADMIN_EMAIL
        admin_password = settings.INITIAL_ADMIN_PASSWORD

        if not admin_email or not admin_password:
            logger.error("❌ HIBA: INITIAL_ADMIN_EMAIL vagy PASSWORD nincs beállítva!")
            return

        stmt = select(User).where(User.email == admin_email)
        admin_exists = (await db.execute(stmt)).scalar_one_or_none()

        if not admin_exists:
            new_person = Person(
                first_name="Rendszer",
                last_name="Adminisztrátor",
                id_uuid=uuid.uuid4() 
            )
            db.add(new_person)
            await db.flush()

            new_admin = User(
                email=admin_email,
                hashed_password=get_password_hash(admin_password),
                role=UserRole.admin,
                is_active=True,
                # JAVÍTÁS: is_verified eltávolítva, mert nincs ilyen mező a modellben
                person_id=new_person.id
            )
            db.add(new_admin)
            await db.flush()
            
            db.add(UserStats(user_id=new_admin.id, total_xp=0, current_level=1))
            logger.info(f"✅ Admin létrehozva: {admin_email}")

        # --- 1. Értékelési szempontok (Admin Motor) ---
        criteria_key = "ASSET_REVIEW_CRITERIA"
        stmt_crit = select(SystemParameter).where(SystemParameter.key == criteria_key)
        if not (await db.execute(stmt_crit)).scalar_one_or_none():
            db.add(SystemParameter(
                key=criteria_key,
                value=["Kényelem", "Fogyasztás", "Megbízhatóság", "Vezetési élmény", "Szervizigény"],
                description="Járműértékelési szempontok"
            ))

        # --- 2. Gamification Pontszabályok ---
        rules = [
            ("ASSET_REGISTER", 100, "Új jármű felvétele"),
            ("ASSET_REVIEW", 75, "Jármű értékelése"),
            ("COST_RECORD", 50, "Költség/Tankolás rögzítése")
        ]
        for key, pts, desc in rules:
            stmt_rule = select(PointRule).where(PointRule.action_key == key)
            if not (await db.execute(stmt_rule)).scalar_one_or_none():
                db.add(PointRule(action_key=key, points=pts, description=desc))

        # --- 3. Gamification Szintek ---
        stmt_level = select(LevelConfig)
        if not (await db.execute(stmt_level)).first():
            db.add_all([
                LevelConfig(level_number=1, min_points=0, rank_name="Kezdő Sofőr"),
                LevelConfig(level_number=2, min_points=500, rank_name="Tapasztalt Vezető"),
                LevelConfig(level_number=3, min_points=2000, rank_name="Flotta Mester")
            ])

        # --- 4. Előfizetési csomagok (MVP korlátok) ---
        stmt_tier = select(SubscriptionTier)
        if not (await db.execute(stmt_tier)).first():
            db.add_all([
                SubscriptionTier(name="Ingyenes", rules={"max_assets": 1, "reports": False}),
                SubscriptionTier(name="Prémium", rules={"max_assets": 5, "reports": True}),
                SubscriptionTier(name="Flotta", rules={"max_assets": 100, "reports": True})
            ])

        
        await db.commit()
        logger.info("✨ A rendszer alapadatai és a Gamification motor készen áll!")

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