"""A minimal webhook receiver (standard library only).

    AIRDESK_WEBHOOK_SECRET=adk_whsec_... python3 receiver.py
"""
import json
import os
from http.server import BaseHTTPRequestHandler, HTTPServer

from verify_webhook import verify_webhook

SECRET = os.environ["AIRDESK_WEBHOOK_SECRET"]
seen = set()  # use a database or Redis with an expiry in production


class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        raw = self.rfile.read(int(self.headers.get("Content-Length", "0")))  # raw bytes, before JSON parsing
        event_id = self.headers.get("Airdesk-Webhook-Id", "")
        ok = verify_webhook(
            SECRET,
            event_id,
            self.headers.get("Airdesk-Webhook-Timestamp"),
            raw,
            self.headers.get("Airdesk-Webhook-Signature", ""),
        )
        self.send_response(200 if ok else 400)  # acknowledge fast, then work
        self.end_headers()
        self.wfile.write(b"ok" if ok else b"bad signature")
        if not ok or event_id in seen:  # events can be delivered more than once
            return
        seen.add(event_id)
        event = json.loads(raw)
        request = event.get("data", {}).get("request") or {}
        # The event is thin: fetch the full record with GET /v1/partner/requests/{id} and your secret key.
        print(event["type"], request.get("id"), request.get("status"))


HTTPServer(("", int(os.environ.get("PORT", "8080"))), Handler).serve_forever()
