"""
Centralized email service API views.
Migrated from apps.email_service.views
"""

from django.contrib.sites.shortcuts import get_current_site
from django_forwardemail.services import EmailService
from drf_spectacular.utils import extend_schema
from rest_framework import status
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView


@extend_schema(
    summary="Send email",
    description="Send an email via the email service.",
    request={
        "type": "object",
        "properties": {
            "to": {
                "type": "string",
                "format": "email",
                "description": "Recipient email address",
            },
            "subject": {"type": "string", "description": "Email subject"},
            "text": {"type": "string", "description": "Email body text"},
            "from_email": {
                "type": "string",
                "format": "email",
                "description": "Sender email address (optional)",
            },
        },
        "required": ["to", "subject", "text"],
    },
    responses={
        200: {
            "type": "object",
            "properties": {
                "message": {"type": "string"},
                "response": {"type": "object"},
            },
        },
        400: "Bad Request",
        500: "Internal Server Error",
    },
    tags=["Email"],
)
class SendEmailView(APIView):
    """
    API endpoint for sending emails.

    Migrated from apps.email_service.views.SendEmailView to centralized API structure.
    """

    permission_classes = [AllowAny]  # Allow unauthenticated access

    def post(self, request):
        """
        Send an email via the email service.

        Request body:
        {
            "to": "recipient@example.com",
            "subject": "Email subject",
            "text": "Email body text",
            "from_email": "sender@example.com"  // optional
        }
        """
        data = request.data
        to = data.get("to")
        subject = data.get("subject")
        text = data.get("text")
        from_email = data.get("from_email")  # Optional

        if not all([to, subject, text]):
            return Response(
                {
                    "detail": "Missing required fields",
                    "required_fields": ["to", "subject", "text"],
                },
                status=status.HTTP_400_BAD_REQUEST,
            )

        try:
            # Get the current site
            site = get_current_site(request)

            # Send email using the site's configuration
            response = EmailService.send_email(
                to=to,
                subject=subject,
                text=text,
                from_email=from_email,  # Will use site's default if None
                site=site,
            )

            return Response(
                {"detail": "Email sent successfully", "response": response},
                status=status.HTTP_200_OK,
            )

        except Exception as e:
            return Response({"detail": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
