from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.conf import settings
from drf_yasg.utils import swagger_auto_schema

from users.permission.sub_admin import IsSuperAdmin
from users.serializers.country_admin_registration_serializer import CountryAdminRegistrationSerializer


class CountryAdminRegistrationView(APIView):
    # permission_classes = [IsSuperAdmin]

    @swagger_auto_schema(
        request_body=CountryAdminRegistrationSerializer,
        responses={201: "OTP sent to email"}
    )
    def post(self, request):
        serializer = CountryAdminRegistrationSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        user = serializer.save()

        # 🔐 Generate OTP
        token = user.create_verification_token()

        subject = "Verify Your discovercafe Country Admin Account"

        text_message = f"""
        Hello {user.full_name or user.email},

        Your verification code is:

        {token}

        This code will expire in 5 minutes.

        If you did not request this, please ignore this email.

        — discovercafe Team
        """

        html_message = render_to_string(
            "emails/verification_email.html",
            {
                "name": user.full_name or user.email,
                "token": token
            }
        )

        send_mail(
            subject=subject,
            message=text_message,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[user.email],
            html_message=html_message,
            fail_silently=False
        )

        return Response(
            {
                "message": "Country admin registered. OTP sent to email for verification."
            },
            status=status.HTTP_201_CREATED
        )
