# /app/app/compare_schema.py
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import inspect, text
from app.database import Base
from app.core.config import settings
import app.models  # Fontos: betölti az összes modellt a Base.metadata-ba

async def compare():
    # Megfelelő async engine létrehozása
    engine = create_async_engine(str(settings.SQLALCHEMY_DATABASE_URI))
    
    def get_diff(connection):
        # Inspector példányosítása a szinkron wrapperen belül
        inspector = inspect(connection)
        
        # Sémák ellenőrzése
        all_schemas = inspector.get_schema_names()
        print(f"Létező sémák: {all_schemas}")
        
        if 'data' not in all_schemas:
            print("❌ HIBA: A 'data' séma nem létezik!")
            return

        db_tables = inspector.get_table_names(schema="data")
        print(f"\n--- Diagnosztika: 'data' séma táblái ---")
        
        # Modellekben definiált táblák a 'data' sémában
        model_tables = [t.name for t in Base.metadata.sorted_tables if t.schema == 'data']
        
        for mt in model_tables:
            if mt not in db_tables:
                print(f"❌ HIÁNYZÓ TÁBLA: {mt}")
            else:
                # Oszlopok összehasonlítása
                db_cols = {c['name']: c for c in inspector.get_columns(mt, schema="data")}
                model_cols = Base.metadata.tables[f"data.{mt}"].columns
                
                print(f"🔍 Ellenőrzés: {mt}")
                missing = []
                for m_col in model_cols:
                    if m_col.name not in db_cols:
                        missing.append(m_col.name)
                
                if missing:
                    print(f"   ❌ Hiányzó oszlopok a DB-ben: {missing}")
                else:
                    print(f"   ✅ Minden oszlop egyezik.")

    async with engine.connect() as conn:
        await conn.run_sync(get_diff)
    
    await engine.dispose()

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