#!/usr/bin/env python3
"""
Egyszerűbb változat: Garázs adatok ellenőrzése és javítása.
"""

import asyncio
import sys
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload

sys.path.insert(0, '/app')

from app.db.session import AsyncSessionLocal
from app.models.identity import User
from app.models.marketplace.organization import Organization, OrganizationMember
from app.models.vehicle.asset import Asset

async def main():
    print("=" * 60)
    print("GARÁZS ADATOK ELLENŐRZÉSE (Egyszerű változat)")
    print("=" * 60)
    
    async with AsyncSessionLocal() as db:
        # 1. Keressük meg a teszt felhasználót
        print("\n1. TESZT FELHASZNÁLÓ KERESÉSE...")
        stmt = select(User).where(User.email == "tester_pro@profibot.hu")
        result = await db.execute(stmt)
        test_user = result.scalar_one_or_none()
        
        if not test_user:
            print("❌ HIBA: A teszt felhasználó nem található!")
            return
        
        print(f"   ✅ Teszt felhasználó: ID={test_user.id}, Email={test_user.email}")
        
        # 2. Ellenőrizzük a szervezeti tagságot
        print("\n2. SZERVEZETI TAGSÁG ELLENŐRZÉSE...")
        org_stmt = (
            select(Organization)
            .join(OrganizationMember)
            .where(OrganizationMember.user_id == test_user.id)
            .where(Organization.is_deleted == False)
        )
        org_result = await db.execute(org_stmt)
        user_orgs = org_result.scalars().all()
        
        if user_orgs:
            print(f"   ✅ A felhasználó tagja {len(user_orgs)} szervezetnek:")
            for org in user_orgs:
                print(f"      - {org.name} (ID: {org.id})")
            target_org = user_orgs[0]
        else:
            print("   ℹ️  Nincs szervezet. Új létrehozása...")
            # Egyszerű szervezet létrehozás
            new_org = Organization(
                full_name="Teszt Flotta Kft.",
                name="Teszt Flotta",
                display_name="Teszt Flotta Kft.",
                tax_number="12345678-2-42",
                country_code="HU",
                folder_slug="teszt-flotta-123",
                org_type="business",
                status="active",
                is_active=True,
                owner_id=test_user.id
            )
            db.add(new_org)
            await db.flush()
            
            org_member = OrganizationMember(
                organization_id=new_org.id,
                user_id=test_user.id,
                role="ADMIN"
            )
            db.add(org_member)
            
            await db.commit()
            await db.refresh(new_org)
            target_org = new_org
            print(f"   ✅ Új szervezet: {target_org.name} (ID: {target_org.id})")
        
        # 3. Járművek lekérdezése
        print("\n3. JÁRMŰVEK LEKÉRDEZÉSE...")
        asset_stmt = (
            select(Asset)
            .where(Asset.owner_person_id == test_user.id)
        )
        asset_result = await db.execute(asset_stmt)
        assets = asset_result.scalars().all()
        
        print(f"   ✅ Összesen {len(assets)} jármű található.")
        
        if not assets:
            print("   ℹ️  Nincsenek járművek. Nincs mit felosztani.")
            return
        
        # 4. Jelenlegi felosztás
        private = [a for a in assets if a.owner_org_id is None]
        corporate = [a for a in assets if a.owner_org_id == target_org.id]
        other = [a for a in assets if a.owner_org_id not in [None, target_org.id]]
        
        print(f"\n   JELENLEGI ÁLLAPOT:")
        print(f"      • Privát: {len(private)} db")
        print(f"      • Céges ({target_org.name}): {len(corporate)} db")
        if other:
            print(f"      • Egyéb: {len(other)} db")
        
        # 5. Ha nincs elég adat, felosztjuk
        if len(private) == 0 or len(corporate) == 0:
            print("\n   ℹ️  Járművek felosztása...")
            half = len(assets) // 2
            
            for i, asset in enumerate(assets):
                if i < half:
                    asset.owner_org_id = None
                else:
                    asset.owner_org_id = target_org.id
            
            await db.commit()
            print(f"   ✅ Felosztva: {half} privát, {len(assets)-half} céges")
        else:
            print("\n   ✅ A járművek már megfelelően fel vannak osztva.")
        
        # 6. Végeredmény
        print("\n" + "=" * 60)
        print("VÉGEREDMÉNY:")
        print("=" * 60)
        print(f"\n📋 TESZT FELHASZNÁLÓ:")
        print(f"   • Email: {test_user.email}")
        print(f"   • User ID: {test_user.id}")
        print(f"   • Szervezet: {target_org.name} (ID: {target_org.id})")
        
        # Új lekérdezés
        asset_result = await db.execute(asset_stmt)
        assets = asset_result.scalars().all()
        private = [a for a in assets if a.owner_org_id is None]
        corporate = [a for a in assets if a.owner_org_id == target_org.id]
        
        print(f"\n🚗 JÁRMŰVEGYÜTT:")
        print(f"   • Összesen: {len(assets)} db")
        print(f"   • Privát garázs: {len(private)} db")
        print(f"   • Céges flotta: {len(corporate)} db")
        
        print("\n" + "=" * 60)
        print("KÉSZ! A tesztadatok előkészítve.")
        print("=" * 60)

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