from django.shortcuts import render, redirect 
import traceback
from django.shortcuts import render, redirect
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from django.urls import reverse # Importación necesaria para generar URLs
from usuarios.models import Area
from .services import invite_new_user
from login.services import authenticate_user


# Create your views here.

def home_view(request):
    if 'user_id' not in request.session:
        return redirect('/')
    return render(request, 'home.html')


@csrf_exempt
@require_http_methods(["POST"])
def invitar_usuario(request):
    """
    Vista: Recibe un correo POST, llama al servicio para crear el usuario, enviar
    el correo y devuelve una respuesta JSON para SweetAlert2.
    """
    # 1. Extraer datos (nombre del campo 'correo' de tu lógica JS)
    email = request.POST.get('correo', '').strip()
    
    # Definimos la URL de registro. Asume que tienes una URL nombrada 'registro'.
    # Si no tienes registro, usa una URL genérica como '/registro/'
    # O la URL estática que tienes en tu código PHP: 'https://tic.jolifoods.co'
    invitation_path = reverse('registro') # Debes definir una URL 'registro' en urls.py
    invitation_url = request.build_absolute_uri(invitation_path)

    try:
        # 2. Llama al servicio, delegando toda la lógica de negocio, DB y Email.
        usuario = invite_new_user(email, invitation_url)
        
        # 3. Responde con éxito
        return JsonResponse({
            'success': True,
            'message': 'Invitación enviada y correo registrado correctamente.',
            'user_id': usuario.pk
        })

    except ValueError as e:
        # 4. Manejo de Errores Controlados (Validación, Usuario Existente)
        return JsonResponse({'success': False, 'message': str(e)}, status=400)

    except Exception as e:
        # 5. Manejo de Errores Inesperados (DB, Error de Envío de Email)
        print(f"Error al invitar usuario: {traceback.format_exc()}")
        return JsonResponse({'success': False, 'message': str(e)}, status=500)