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

load_dotenv()

# Cím beállítása
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 build_db():
    print(f"🔌 Kapcsolódás a rendszerhez...")
    engine = create_async_engine(DATABASE_URL)

    async with engine.begin() as conn:
        print("🏗️  'DATA' séma előkészítése...")
        await conn.execute(text("CREATE SCHEMA IF NOT EXISTS data;"))
        
        # 1. FELHASZNÁLÓK TÁBLA (Céges/Magán logika)
        print("👤 Users tábla létrehozása...")
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.users (
                id SERIAL PRIMARY KEY,
                email VARCHAR(255) UNIQUE NOT NULL,
                password_hash VARCHAR(255) NOT NULL,
                role VARCHAR(20) DEFAULT 'PRIVATE', -- 'PRIVATE', 'COMPANY', 'ADMIN'
                company_name VARCHAR(255),          -- Ha cég
                tax_number VARCHAR(50),             -- Ha cég
                is_active BOOLEAN DEFAULT FALSE,    -- Email megerősítésig
                created_at TIMESTAMP DEFAULT NOW()
            );
        """))

        # 2. JÁRMŰ TÖRZS (A Fizikai Vas - Tulajdonos nélkül!)
        print("🚗 Vehicles tábla létrehozása (A Vas)...")
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.vehicles (
                id SERIAL PRIMARY KEY,
                model_id INTEGER REFERENCES ref.vehicle_models(id),
                vin VARCHAR(50) UNIQUE NOT NULL,    -- ALVÁZSZÁM (Az igazi kulcs)
                current_plate VARCHAR(20) NOT NULL, -- A mostani rendszám
                production_year INTEGER,
                created_at TIMESTAMP DEFAULT NOW()
            );
        """))

        # 3. ÉLETÚT ÉS JOGOSULTSÁG (A Történelem)
        print("📜 History tábla létrehozása (Kié mikor volt?)...")
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.vehicle_history (
                id SERIAL PRIMARY KEY,
                vehicle_id INTEGER REFERENCES data.vehicles(id),
                user_id INTEGER REFERENCES data.users(id),
                
                role VARCHAR(20) NOT NULL, -- 'OWNER' (Tulaj), 'DRIVER' (Sofőr), 'LEASE' (Lízingelő)
                
                start_date DATE NOT NULL,  -- Mikor vette át?
                end_date DATE,             -- Mikor adta le? (Ha NULL, akkor nála van!)
                
                start_mileage INTEGER,     -- Óraállás átvételkor
                end_mileage INTEGER,       -- Óraállás leadáskor
                
                is_active BOOLEAN GENERATED ALWAYS AS (end_date IS NULL) STORED -- Segédmező a gyors kereséshez
            );
        """))

        # 4. KÖLTSÉGEK (Szeparált pénzügyek)
        print("💸 Costs tábla létrehozása...")
        await conn.execute(text("""
            CREATE TABLE IF NOT EXISTS data.costs (
                id SERIAL PRIMARY KEY,
                vehicle_id INTEGER REFERENCES data.vehicles(id),
                user_id INTEGER REFERENCES data.users(id), -- Ki fizette? (Csak ő láthatja!)
                
                cost_type VARCHAR(50) NOT NULL, -- FUEL, SERVICE, TAX, INSURANCE, LEASE...
                amount DECIMAL(10, 2) NOT NULL,
                date DATE NOT NULL,
                mileage_at_cost INTEGER,
                
                description TEXT,
                document_url VARCHAR(255),      -- Fotó linkje
                
                created_at TIMESTAMP DEFAULT NOW()
            );
        """))

    print("✅ KÉSZ! A Professzionális Adatmodell felépült.")
    await engine.dispose()

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