from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic.edit import UpdateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, update_session_auth_hash
from django.contrib import messages

from .models import UsuarioUtrau
from .forms import LoginManualForm, RegistroManualForm, PerfilUsuarioForm

def login_manual_view(request):
    if request.method == 'POST':
        form = LoginManualForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                # --- VALIDACIÓN ELIMINADA PARA PRUEBAS ---
                #if getattr(user, 'requiere_cambio_pin', False):
                #    return redirect('cambiar_pin')
                return redirect('/')
                # -----------------------------------------
            else:
                messages.error(request, "El Alias o el PIN no son correctos.")
    else:
        form = LoginManualForm()
    return render(request, 'accounts/login_manual.html', {'form': form})

def registro_manual_view(request):
    if request.method == 'POST':
        form = RegistroManualForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request, "¡Registro exitoso! Ya te enviamos el PIN por WhatsApp.")
            return redirect('account_login')
        else:
            messages.error(request, "Hubo un error en los datos. Revisá la foto y los campos.")
    else:
        form = RegistroManualForm()
    return render(request, 'accounts/registro_manual.html', {'form': form})

@login_required
def cambiar_pin_obligatorio(request):
    if request.method == 'POST':
        nuevo_pin = request.POST.get('nuevo_pin')
        if nuevo_pin and len(nuevo_pin) >= 4:
            request.user.set_password(nuevo_pin)
            request.user.requiere_cambio_pin = False
            request.user.save()
            update_session_auth_hash(request, request.user) 
            messages.success(request, '¡PIN cambiado correctamente!')
            return redirect('/') 
        else:
            messages.error(request, 'El PIN debe tener al menos 4 caracteres.')
    return render(request, 'accounts/cambiar_pin.html')

class PerfilUsuarioView(LoginRequiredMixin, UpdateView):
    model = UsuarioUtrau
    template_name = 'home/perfil.html'
    form_class = PerfilUsuarioForm
    success_url = reverse_lazy('perfil_usuario')

    def get_object(self, queryset=None):
        return self.request.user