"""
Setup script for core
This script helps with initial project setup
"""

import os
import sys
import django
from pathlib import Path

# Add project to path
BASE_DIR = Path(__file__).resolve().parent
sys.path.insert(0, str(BASE_DIR))

# Setup Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
django.setup()

from django.core.management import call_command
from users.models import User, Department


def create_env_file():
    """Create .env file from example if it doesn't exist"""
    env_file = BASE_DIR / '.env'
    env_example = BASE_DIR / '.env.example'
    
    if not env_file.exists() and env_example.exists():
        print("📝 Creando archivo .env...")
        with open(env_example, 'r') as f:
            content = f.read()
        with open(env_file, 'w') as f:
            f.write(content)
        print("✅ Archivo .env creado exitosamente")
    else:
        print("ℹ️  Archivo .env ya existe")


def run_migrations():
    """Run database migrations"""
    print("\n🔄 Ejecutando migraciones...")
    try:
        call_command('makemigrations')
        call_command('migrate')
        print("✅ Migraciones completadas exitosamente")
    except Exception as e:
        print(f"❌ Error al ejecutar migraciones: {e}")
        return False
    return True


def create_superuser():
    """Create a superuser if none exists"""
    print("\n👤 Verificando superusuario...")
    
    if User.objects.filter(is_superuser=True).exists():
        print("ℹ️  Ya existe un superusuario")
        return
    
    print("Creando superusuario...")
    email = input("Email (ildemaro.romero@jeanlogistics.com): ") or "ildemaro.romero@jeanlogistics.com"
    name = input("Nombre (admin): ") or "admin"
    password = input("Contraseña (s3cr3tKey): ") or "s3cr3tKey"
    
    try:
        User.objects.create_superuser(
            email=email,
            name=name,
            password=password
        )
        print(f"✅ Superusuario creado exitosamente")
        print(f"   Email: {email}")
        print(f"   Contraseña: {password}")
    except Exception as e:
        print(f"❌ Error al crear superusuario: {e}")


def create_sample_data():
    """Create sample data for testing"""
    print("\n📊 ¿Desea crear datos de ejemplo? (s/n): ", end='')
    response = input().lower()
    
    if response != 's':
        print("⏭️  Omitiendo creación de datos de ejemplo")
        return
    
    print("Creando datos de ejemplo...")
    
    try:
        # Create sample users
        if not User.objects.filter(email='editor@core.com').exists():
            User.objects.create_user(
                email='editor@core.com',
                name='Editor',
                password='editor123',
                can_add_documents=True,
                can_create_folders=True,
                can_download=True,
                can_view=True,
                can_edit_folders=True,
                can_edit_documents=True,
            )
            print("  ✅ Usuario 'Editor' creado")
        
        if not User.objects.filter(email='viewer@core.com').exists():
            User.objects.create_user(
                email='viewer@core.com',
                name='Visualizador',
                password='viewer123',
                can_view=True,
                can_download=True,
            )
            print("  ✅ Usuario 'Visualizador' creado")
        
        print("\n✅ Datos de ejemplo creados exitosamente")
        print("\nUsuarios creados:")
        print("  - admin@core.com / admin123 (Superusuario)")
        print("  - editor@core.com / editor123 (Editor)")
        print("  - viewer@core.com / viewer123 (Visualizador)")
        
    except Exception as e:
        print(f"❌ Error al crear datos de ejemplo: {e}")

def seed_departments():
    """Crea los departamentos iniciales si no existen"""
    departments = [
        {"name": "Ingeniería", "description": "Departamento de ingeniería"},
        {"name": "Administración", "description": "Departamento de administración"},
        {"name": "Ventas", "description": "Departamento de ventas"},
    ]

    for dept in departments:
        obj, created = Department.objects.get_or_create(
            name=dept["name"],
            defaults={"description": dept["description"]}
        )
        if created:
            print(f"✅ Departamento creado: {obj.name}")
        else:
            print(f"ℹ️ Departamento ya existía: {obj.name}")

def main():
    """Main setup function"""
    print("=" * 60)
    print("🚀 core - Setup Inicial")
    print("=" * 60)
    
    # Step 1: Create .env file
    create_env_file()
    
    # Step 2: Run migrations
    if not run_migrations():
        print("\n❌ Setup cancelado debido a errores en las migraciones")
        return
    
    # Step 3: Create superuser
    create_superuser()
    
    # Step 4: Create departments
    seed_departments()
    
    # Step 5: Create sample data
    create_sample_data()
    
    print("\n" + "=" * 60)
    print("✅ Setup completado exitosamente!")
    print("=" * 60)
    print("\n📚 Próximos pasos:")
    print("  1. Ejecutar el servidor: python manage.py runserver")
    print("  2. Acceder al admin: http://localhost:8000/admin/")
    print("  3. Ver documentación API: http://localhost:8000/swagger/")
    print("\n💡 Importar la colección de Postman:")
    print("  - core_API.postman_collection.json")
    print("=" * 60)


if __name__ == '__main__':
    main()
