import logging
from typing import Any

from fastapi import APIRouter, Depends

from app.core.config import Settings, get_settings
from app.core.security import verify_bearer_token
from app.services.freshchat_event_service import (
    extract_event_context,
    handle_conversation_created_event,
    handle_message_created_event,
)

logger = logging.getLogger(__name__)

router = APIRouter(
    prefix="/freshchat/events",
    tags=["freshchat-events"],
    dependencies=[Depends(verify_bearer_token)],
)


@router.post("/conversation")
def freshchat_conversation_event(
    payload: dict[str, Any],
    settings: Settings = Depends(get_settings),
) -> dict:
    logger.info("Received Freshchat conversation event context=%s", extract_event_context(payload))
    return handle_conversation_created_event(payload, settings)


@router.post("/message")
def freshchat_message_event(
    payload: dict[str, Any],
    settings: Settings = Depends(get_settings),
) -> dict:
    logger.info("Received Freshchat message event context=%s", extract_event_context(payload))
    return handle_message_created_event(payload, settings)


@router.post("/install")
def freshchat_app_install_event(payload: dict[str, Any]) -> dict:
    logger.info(
        "Freshworks custom app install/config ping received event=%s account=%s",
        payload.get("event"),
        (payload.get("account") or {}).get("account_id") or (payload.get("currentHost") or {}).get("account_id"),
    )
    return {
        "error": "false",
        "mensaje": "Freshworks custom app conectada correctamente.",
        "response_type": "text",
        "data": {"received": True, "event": payload.get("event")},
    }


@router.post("/uninstall")
def freshchat_app_uninstall_event(payload: dict[str, Any]) -> dict:
    logger.info("Freshworks custom app uninstall ping received event=%s", payload.get("event"))
    return {
        "error": "false",
        "mensaje": "Freshworks custom app desinstalada.",
        "response_type": "text",
        "data": {"received": True, "event": payload.get("event")},
    }
