#!/usr/bin/env python
"""
Script para crear usuarios activos a partir de una lista predefinida.
Asigna a todos el primer departamento existente (o crea 'General' si no hay ninguno).
Contraseña fija: coinsamatik26
No modifica usuarios ya existentes.
"""

import os
import sys
import django
from pathlib import Path

# Configurar entorno Django
BASE_DIR = Path(__file__).resolve().parent
sys.path.insert(0, str(BASE_DIR))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
django.setup()

# Importar modelos después de django.setup()
from django.contrib.auth import get_user_model
from users.models import Department

User = get_user_model()

# Lista de emails activos
ACTIVE_EMAILS = [
    "supply@coinsamatik.com",
    "compras2@coinsamatik.com",
    "compras@coinsamatik.com",
    "auxcontable1@coinsamatik.com",
    "contabilidad@coinsamatik.com",
    "ingenieria04@coinsamatik.com",
    "ingenieria02@coinsamatik.com",
    "ventas03@coinsamatik.com",
    "agil@coinsamatik.com",
    "jpablos@coinsamatik.com",
    "administracion@coinsamatik.com",
    "andrea.lopez@jeanlogistics.com",
]

def get_first_department():
    """
    Retorna el primer departamento existente (activo).
    Si no hay ninguno, crea uno por defecto llamado 'General'.
    """
    dept = Department.objects.first()
    if dept:
        return dept
    # Crear departamento por defecto
    dept = Department.objects.create(name='General', description='Departamento general')
    print(f"✅ Departamento por defecto creado: {dept.name}")
    return dept

def create_user(email, department, password='coinsamatik26'):
    """Crea un usuario si no existe (incluyendo eliminados lógicos)."""
    # Verificar si ya existe (incluyendo soft-deleted)
    user = User.all_objects.filter(email=email).first()
    if user:
        if user.deleted_at:
            print(f"⚠️ Usuario eliminado encontrado: {email}. No se restaura automáticamente. Cree otro o restaure manualmente.")
        else:
            print(f"⏩ Usuario ya existe: {email}")
        return

    # Crear nuevo
    name_part = email.split('@')[0].capitalize()
    user = User(
        email=email,
        name=name_part,
        department=department,
        is_active=True,
        # Permisos por defecto (can_view=True según el modelo, el resto False)
    )
    user.set_password(password)
    user.save()
    print(f"✅ Usuario creado: {email}")

def main():
    print("=" * 60)
    print("👥 CREACIÓN DE USUARIOS ACTIVOS")
    print("=" * 60)

    # Obtener departamento
    dept = get_first_department()
    print(f"📌 Departamento asignado: {dept.name} (ID: {dept.id})")

    # Crear usuarios
    print(f"\n📧 Procesando {len(ACTIVE_EMAILS)} usuarios...\n")
    for email in ACTIVE_EMAILS:
        create_user(email, dept)

    print("\n" + "=" * 60)
    print("✅ Proceso completado.")
    print("=" * 60)

if __name__ == '__main__':
    main()