from rest_framework.generics import CreateAPIView
from rest_framework.permissions import AllowAny

from contact.models import Contact
from contact.serializers import ContactSerializer
from contact.tasks import send_contact_email


# Create your views here.
class ContactCreate(CreateAPIView):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    permission_classes = [AllowAny]  # Herkes contact gönderebilir

    def get_client_ip(self, request):
        """İstemcinin IP adresini al"""
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip

    def perform_create(self, serializer):
        # IP adresini al
        ip_address = self.get_client_ip(self.request)

        # Kullanıcı varsa kaydet, yoksa None olarak kaydet
        user = self.request.user if self.request.user.is_authenticated else None

        # Contact'ı kaydet
        contact = serializer.save(user=user, ip=ip_address)

        # Celery task ile email gönder (arka planda)
        send_contact_email.delay(
            name=contact.name,
            email=contact.email,
            subject=contact.subject,
            message=contact.message,
            ip=ip_address
        )

