import json
import logging
from apps.appointments.models import WebhookEvent


logger = logging.getLogger(__name__)


class WebhookEventService:
    @staticmethod
    def log_event(request, source, event_type) -> WebhookEvent | None:

        try:
            raw_payload = request.data or json.loads(request.body)
        except Exception as exc:
            logger.warning("Failed to parse JSON payload: %s", exc)
            raw_payload = {"_raw": request.body.decode(errors="ignore")}

        try:
            headers = {k: str(v) for k, v in request.headers.items()}
            return WebhookEvent.objects.create(
                source=source,
                event_type=event_type,
                headers=headers,
                raw_payload=raw_payload,
            )
        except Exception as exc:
            logger.exception(f"Failed to log webhook event {exc}")
            return None
