import asyncio
import os
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
from dotenv import load_dotenv

load_dotenv()

raw_url = os.getenv("DATABASE_URL")
if not raw_url:
    raw_url = "postgresql://admin:PASSWORD_111@postgres-db:5432/service_finder"
DATABASE_URL = raw_url.replace("postgresql://", "postgresql+asyncpg://").replace("/service_finder_db", "/service_finder")

async def upgrade_permissions():
    print(f"🔌 Kapcsolódás...")
    engine = create_async_engine(DATABASE_URL)

    async with engine.begin() as conn:
        print("👑 USERS tábla bővítése (Rendszer és Szervezeti szintek)...")
        
        # 1. SYS_ROLE: Rendszergazda / Moderátor / User
        await conn.execute(text("""
            ALTER TABLE data.users 
            ADD COLUMN IF NOT EXISTS sys_role VARCHAR(20) DEFAULT 'USER';
        """))

        # 2. HIERARCHIA: Ki a főnököd? (Parent User ID)
        # Ha NULL, akkor ő a Cégtulajdonos (SuperUser). Ha van ID, akkor Alkalmazott.
        await conn.execute(text("""
            ALTER TABLE data.users 
            ADD COLUMN IF NOT EXISTS parent_id INTEGER REFERENCES data.users(id);
        """))

        # 3. ORG_ROLE: Cégen belüli szerep (Owner, Fleet Manager, Employee)
        await conn.execute(text("""
            ALTER TABLE data.users 
            ADD COLUMN IF NOT EXISTS org_role VARCHAR(20) DEFAULT 'OWNER';
        """))

        print("🚦 VEHICLE_HISTORY tábla bővítése (Sofőr jogosultságok)...")
        
        # 4. ACCESS_LEVEL: Mit láthat a sofőr? (COST_MANAGER vs LOG_ONLY)
        await conn.execute(text("""
            ALTER TABLE data.vehicle_history 
            ADD COLUMN IF NOT EXISTS access_level VARCHAR(20) DEFAULT 'FULL'; 
            -- Lehetséges értékek: 'FULL', 'COST_MANAGER', 'LOG_ONLY'
        """))

        # --- DEMO ADATOK FRISSÍTÉSE ---
        print("👤 Demo User (ID:1) kinevezése Rendszergazdának és Cégtulajdonosnak...")
        await conn.execute(text("""
            UPDATE data.users 
            SET sys_role = 'SYS_ADMIN', org_role = 'OWNER', parent_id = NULL
            WHERE id = 1;
        """))

    print("✅ KÉSZ! A jogosultsági mátrix beépítve az adatbázisba.")
    await engine.dispose()

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