#!/usr/bin/env python3
# reset_sqlserver.py - Script corregido para SQL Server

import os
import sys
from sqlalchemy import create_engine, text
from dotenv import load_dotenv

# Cargar variables de entorno
load_dotenv()

# CONFIGURACIÓN DE BASE DE DATOS
DB_SERVER = os.getenv('DB_SERVER', 'localhost')
DB_PORT = os.getenv('DB_PORT', '1433')
DB_DATABASE = os.getenv('DB_DATABASE', 'GestionClientes')
DB_USERNAME = os.getenv('DB_USERNAME', 'sa')
DB_PASSWORD = os.getenv('DB_PASSWORD', 'Sistemas123*/')
DB_DRIVER = os.getenv('DB_DRIVER', 'ODBC Driver 17 for SQL Server')

def reset_database_sqlserver():
    """Eliminar y recrear la base de datos en SQL Server"""
    
    print("🗄️ REINICIANDO BASE DE DATOS SQL SERVER...")
    print("=" * 50)
    
    try:
        # Conectar a la base de datos maestra (master)
        master_uri = (
            f"mssql+pyodbc://{DB_USERNAME}:{DB_PASSWORD}@{DB_SERVER}:{DB_PORT}/master"
            f"?driver={DB_DRIVER.replace(' ', '+')}&TrustServerCertificate=yes&Encrypt=yes"
        )
        
        print(f"🔗 Conectando a: {DB_SERVER}:{DB_PORT}")
        
        # Crear engine con autocommit
        engine = create_engine(master_uri, isolation_level="AUTOCOMMIT")
        
        with engine.connect() as conn:
            # Verificar si la BD existe
            result = conn.execute(text(f"""
                SELECT database_id 
                FROM sys.databases 
                WHERE name = '{DB_DATABASE}'
            """))
            
            if result.fetchone():
                print(f"📋 Base de datos '{DB_DATABASE}' encontrada")
                
                # Paso 1: Poner en modo single user
                print("🔒 Cerrando conexiones activas...")
                try:
                    conn.execute(text(f"""
                        ALTER DATABASE [{DB_DATABASE}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
                    """))
                    print("✅ Conexiones cerradas")
                except Exception as e:
                    print(f"⚠️ Warning al cerrar conexiones: {e}")
                
                # Paso 2: Eliminar la base de datos
                print(f"🗑️ Eliminando base de datos '{DB_DATABASE}'...")
                conn.execute(text(f"DROP DATABASE [{DB_DATABASE}]"))
                print("✅ Base de datos eliminada")
                
            else:
                print(f"ℹ️ La base de datos '{DB_DATABASE}' no existe")
            
            # Paso 3: Crear nueva base de datos
            print(f"🆕 Creando nueva base de datos '{DB_DATABASE}'...")
            conn.execute(text(f"CREATE DATABASE [{DB_DATABASE}]"))
            print("✅ Nueva base de datos creada")
            
            # Verificar creación
            result = conn.execute(text(f"""
                SELECT name FROM sys.databases WHERE name = '{DB_DATABASE}'
            """))
            
            if result.fetchone():
                print("✅ Verificación exitosa - Base de datos lista")
            else:
                print("❌ Error en la verificación")
                return False
            
        print("\n" + "=" * 50)
        print("🎉 PROCESO COMPLETADO EXITOSAMENTE")
        print("✅ Base de datos limpia y lista para usar")
        print("\n💡 Ahora ejecuta tu aplicación:")
        print("   python3 app.py")
        print("\n📋 Las tablas se crearán automáticamente")
        print("=" * 50)
        
        return True
        
    except Exception as e:
        print(f"\n❌ ERROR: {e}")
        print("\n🔧 SOLUCIONES:")
        print("1. Verifica que SQL Server esté corriendo:")
        print("   sudo systemctl status mssql-server")
        print("2. Verifica las credenciales")
        print("3. Cierra todas las conexiones a la BD manualmente")
        return False

def show_connection_info():
    """Mostrar información de conexión"""
    print("🔧 INFORMACIÓN DE CONEXIÓN:")
    print(f"   Servidor: {DB_SERVER}:{DB_PORT}")
    print(f"   Usuario: {DB_USERNAME}")
    print(f"   Base de datos: {DB_DATABASE}")
    print(f"   Driver: {DB_DRIVER}")
    print()

if __name__ == "__main__":
    print("🗄️ SCRIPT DE REINICIO PARA SQL SERVER")
    print("=" * 50)
    
    show_connection_info()
    
    # Confirmar acción
    respuesta = input("¿Eliminar y recrear la base de datos? (si/no): ").lower()
    
    if respuesta in ['si', 's', 'sí', 'yes', 'y']:
        if reset_database_sqlserver():
            print("\n🚀 ¡Listo! Ejecuta: python3 app.py")
            sys.exit(0)
        else:
            sys.exit(1)
    else:
        print("❌ Operación cancelada")
        sys.exit(0)