# accounts/views/login.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.models import User
from django.utils.translation import gettext as _
from rest_framework.decorators import action
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from .base import DummySerializer


class LoginViewSet(viewsets.ViewSet):
    permission_classes = (AllowAny,)
    serializer_class = DummySerializer

    @action(detail=False, methods=['get', 'POST'], url_path=r'')
    def admin_login(self, request):
        base_domain = request.build_absolute_uri('/')
        
        # If user is already authenticated, redirect to homepage
        if request.user.is_authenticated:
            messages.info(request, _("You are already logged in."))
            return redirect(f'{base_domain}/')
        
        if request.method == "POST":
            email = request.POST.get('username')
            password = request.POST.get('password')
            
            if email and password:
                user = User.objects.filter(email=email).first()
                if user:
                    if user.check_password(password):
                        login(request, user, backend='django.contrib.auth.backends.ModelBackend')
                        messages.success(request, _("Welcome back! You have been successfully logged in."))
                        return redirect(f'{base_domain}/')
                    else:
                        messages.error(request, _("Invalid password. Please try again."))
                else:
                    messages.error(request, _("Invalid email or password. Please try again."))
            else:
                messages.error(request, _("Please enter both email and password."))
        
        return render(request, 'login.html', {'base_domain': base_domain})