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_invites():
    print(f"🔌 Kapcsolódás...")
    engine = create_async_engine(DATABASE_URL)

    async with engine.begin() as conn:
        print("📨 Invitations (Meghívók) tábla létrehozása...")
        # Ez tárolja a függőben lévő meghívásokat
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.invitations (
                id SERIAL PRIMARY KEY,
                email VARCHAR(255) NOT NULL,
                inviter_id INTEGER REFERENCES data.users(id), -- Ki hívta meg? (Cég)
                role VARCHAR(20) NOT NULL,                    -- Milyen szerepre? (MANAGER, DRIVER)
                access_level VARCHAR(20) DEFAULT 'FULL',      -- A/B Sofőr szint
                token VARCHAR(100) UNIQUE NOT NULL,           -- A titkos link kódja
                status VARCHAR(20) DEFAULT 'PENDING',         -- PENDING, ACCEPTED, EXPIRED
                created_at TIMESTAMP DEFAULT NOW(),
                expires_at TIMESTAMP
            );
        """))

        print("🤝 Fleet Members (Többcéges tagság) tábla létrehozása...")
        # Ez teszi lehetővé, hogy valaki több céghez is tartozzon
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.fleet_members (
                id SERIAL PRIMARY KEY,
                user_id INTEGER REFERENCES data.users(id),    -- A Dolgozó
                owner_id INTEGER REFERENCES data.users(id),   -- A Cég / Tulajdonos
                role VARCHAR(20) NOT NULL,                    -- FLEET_MANAGER, DRIVER
                joined_at TIMESTAMP DEFAULT NOW(),
                
                -- Egy ember egy cégnél csak egyszer szerepelhet
                UNIQUE(user_id, owner_id)
            );
        """))

        # Takarítás: A régi 'parent_id' már nem kell, mert a fleet_members kiváltja
        # De biztonságból egyelőre csak NULL-ra állítjuk, nem töröljük az oszlopot
        # await conn.execute(text("UPDATE data.users SET parent_id = NULL;")) 

    print("✅ KÉSZ! A rendszer készen áll a biztonságos meghívókra.")
    await engine.dispose()

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