"""Local integration receiver: durable outbox, no product data or fulfillment here.
Expose behind your HTTPS reverse proxy. Set WEBHOOK_SECRET and WEBHOOK_DB.
"""
from http.server import BaseHTTPRequestHandler, HTTPServer
from client import verify_webhook
import json, os, sqlite3
SECRET=os.environ['WEBHOOK_SECRET']
DB=os.environ.get('WEBHOOK_DB','merchant-events.sqlite')
with sqlite3.connect(DB) as db:
    db.execute('CREATE TABLE IF NOT EXISTS jobs (event_id TEXT PRIMARY KEY, payload TEXT NOT NULL, status TEXT NOT NULL DEFAULT "pending")')
class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        try:
            size=int(self.headers.get('Content-Length','0'))
            if not 0<size<=65536: raise ValueError('Invalid size')
            self.connection.settimeout(10)
            event=verify_webhook(self.rfile.read(size),self.headers,SECRET)
        except (ValueError,KeyError,TimeoutError):
            self.send_error(400);return
        if event.get('test') or event.get('type')=='webhook.test':
            self.send_response(204);self.end_headers();return
        if event.get('type')=='payment_intent.succeeded':
            # Commit the deduplicated job before acknowledging. Your worker must
            # verify the receipt and use an idempotent order-delivery operation.
            with sqlite3.connect(DB,timeout=5) as db:
                db.execute('INSERT OR IGNORE INTO jobs(event_id,payload) VALUES(?,?)',(str(event['id']),json.dumps(event)))
        self.send_response(204);self.end_headers()
    def log_message(self,*args): pass
if __name__=='__main__': HTTPServer(('127.0.0.1',8081),Handler).serve_forever()
