import requests
import json
from visitors_app.views import date_time
from visitors_app.models import whatsapp_send_message_count
from django.contrib import messages
from django.core.exceptions import ObjectDoesNotExist
from django.conf import settings


def visitor_reject_whatsapp_notification(
        request,
        visitor_mobile,
        visitor_name,
        employee_name,
        company_name
):
    try:

        message_count = whatsapp_send_message_count.objects.first()

        if not message_count:
            message_count = whatsapp_send_message_count.objects.create(
                count=0,
                created_at=date_time(),
                updated_at=date_time()
            )

        # Check limit
        if message_count.count >= settings.WHATSAPP_SEND_MESSAGE_COUNT_LIMIT:
            messages.error(
                request,
                "You have reached your WhatsApp message limit.",
                extra_tags="danger"
            )
            return

        try:
            # Warning for limit
            if settings.WHATSAPP_LIMIT_EXCEEDED_WARNING <= message_count.count < settings.WHATSAPP_SEND_MESSAGE_COUNT_LIMIT:
                remaining_messages = settings.WHATSAPP_SEND_MESSAGE_COUNT_LIMIT - message_count.count

                messages.warning(
                    request,
                    f"Warning: Only {remaining_messages} message(s) left before limit reached."
                )

        except ObjectDoesNotExist:

            messages.error(
                request,
                "Error: Message count record not found.",
                extra_tags="danger"
            )
            return

        # WhatsApp API URL
        url = "https://us-central1-pristine-nomad-264707.cloudfunctions.net/SendTemplateWhatsappV2"

        headers = {
            "Content-Type": "application/json"
        }

        # Payload
        payload = {
            "FromMobileNo": "918200599525",
            "FBToken": "EAB8uAArmndABO4ewJWGktpcbuBfZAiFV6XUIOYdEr9FR8L05gprGxlb1Sx9DNFwY9q1A8f3NcZAcs4b7DhE9nZBT5ZACPLxNIL3J0vTNHpvuam7zfrsHcwYilrmVybIowxY7xWapORJIUoPMcqWykvnFjgsnBqvZBURIzKEkUMZAfdPlQJdQ0b6W63W2sBgJ6i",
            "toMobileNo": visitor_mobile,
            "TemplateName": "visitor_request_reject",
            "TemplateLanguage": "en",
            "EmployeeName": employee_name,
            "TemplateVariableType": "POSITIONAL",
            "Variables": [
                {
                    "Variable": visitor_name
                },
                {
                    "Variable": company_name
                }
            ],
            "HeaderPath": ""
        }

        response = requests.post(
            url,
            data=json.dumps(payload),
            headers=headers
        )

        response_data = response.json()

        if response.status_code == 200 and response_data.get('status') == 1:

            message_count.count += 1
            message_count.updated_at = date_time()
            message_count.save()

            messages.success(
                request,
                "Visitor rejection WhatsApp notification sent successfully.",
                extra_tags="success"
            )

        else:

            messages.error(
                request,
                f"Failed to send rejection WhatsApp notification: {response_data}",
                extra_tags="danger"
            )

    except requests.exceptions.RequestException as e:

        print(f"An error occurred: {e}")

        messages.error(
            request,
            f"Error: {e}",
            extra_tags="danger"
        )