from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from .forms import CustomerRegistrationForm, CustomerLoginForm
from .models import User


def register(request):
    if request.user.is_authenticated:
        return redirect('dashboard:my_account')
    
    if request.method == 'POST':
        form = CustomerRegistrationForm(request.POST, request.FILES)
        if form.is_valid():
            user = form.save()
            profile = getattr(user, 'profile', None)
            
            
            messages.success(request, 'Registration successful! You can now login.')
            return redirect('users:login')
    else:
        form = CustomerRegistrationForm()
    
    return render(request, 'users/register.html', {'form': form})


def login_view(request):
    if request.user.is_authenticated:
        return redirect('dashboard:my_account')
    
    if request.method == 'POST':
        form = CustomerLoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            
            try:
                user = User.objects.get(email=email)
                if not user.is_active:
                    messages.error(
                        request, 
                        'Your account has been deactivated. Please contact support for assistance.'
                    )
                    return render(request, 'users/login.html', {'form': form})
            except User.DoesNotExist:
                pass
            
            user = authenticate(request, username=email, password=password)
            
            if user is not None:
                login(request, user)
                messages.success(request, 'Login successful!')
                
                next_url = request.GET.get('next', 'dashboard:my_account')
                return redirect(next_url)
            else:
                messages.error(request, 'Invalid email or password.')
    else:
        form = CustomerLoginForm()
    
    return render(request, 'users/login.html', {'form': form})


@login_required
@require_POST
def logout_view(request):
    logout(request)
    messages.success(request, 'You have been logged out successfully.')
    return redirect('users:login')
