"""Webhooks recus de photobooth-app via plugin_commander.""" import asyncio import logging from fastapi import APIRouter, Request, Query logger = logging.getLogger(__name__) router = APIRouter() DEFAULT_COUNTDOWN = 5.0 @router.get("/webhook/photobooth") async def photobooth_webhook( request: Request, event_key: str = Query(default=""), mediaitem_type: str = Query(default=""), ): led = request.app.state.led_service btn = request.app.state.button_service ws = request.app.state.ws_manager logger.info("Webhook photobooth: event=%s type=%s", event_key, mediaitem_type) await ws.broadcast({"type": "photobooth_event", "event": event_key, "media_type": mediaitem_type}) match event_key: case "counting": led.play("countdown", countdown_duration=DEFAULT_COUNTDOWN) case "capture": led.play("capture") case "captured": led.play("captured") case "finished": led.play("finished") asyncio.create_task(_delayed_relay_on(btn, 2.5)) event_svc = getattr(request.app.state, "event_service", None) if event_svc: slug = request.app.state.config.event.slug asyncio.create_task(event_svc.increment(slug, "photos_taken")) case "start": led.play("idle") case "stop": led.play("off") case _: logger.debug("Evenement inconnu: %s", event_key) return {"ok": True, "event": event_key} async def _delayed_relay_on(btn, delay: float): await asyncio.sleep(delay) if btn: btn.relay_on()