import asyncio
import asyncpg
import os

# Utilizamos las credenciales actuales para conectarnos y crear el nuevo usuario
DB_USER = os.getenv("DB_USER", "postgres")
DB_PASS = os.getenv("DB_PASS", "postgres") # Usar postgres por defecto o project_admin
DB_NAME = os.getenv("DB_NAME", "gestion_proyectos")

async def create_db_user():
    try:
        # Intenta conectarse a la DB default (postgres) para crear roles globales
        # Si tienes una base específica y un usuario administrador diferente, cámbialo.
        conn = await asyncpg.connect(user='postgres', password='secure_password_here', database='postgres', host='localhost')
    except Exception as e:
        print(f"No se pudo conectar como 'postgres'. Intentando como 'project_admin'... Error: {e}")
        try:
            conn = await asyncpg.connect(user='project_admin', password='secure_password_here', database='gestion_proyectos', host='localhost')
        except Exception as e2:
            print(f"Error de conexión: {e2}")
            print("Asegúrate de ejecutar este script en el servidor (Proxmox/Ubuntu) con las credenciales maestras correctas.")
            return
            
    try:
        # Check if role exists
        role_exists = await conn.fetchval("SELECT 1 FROM pg_roles WHERE rolname='jampuero'")
        if role_exists:
            print("El rol 'jampuero' ya existe en PostgreSQL. Actualizando contraseña y privilegios...")
            await conn.execute("ALTER ROLE jampuero WITH PASSWORD 'JAC26!' SUPERUSER CREATEDB CREATEROLE;")
        else:
            print("Creando rol PostgreSQL 'jampuero'...")
            await conn.execute("CREATE ROLE jampuero WITH LOGIN PASSWORD 'JAC26!' SUPERUSER CREATEDB CREATEROLE;")
        
        print("¡Usuario de BD 'jampuero' configurado exitosamente!")
    except Exception as e:
        print(f"Error al crear el rol: {e}")
    finally:
        await conn.close()

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