import logging

from fastapi import APIRouter, Depends, Request

from app.core.config import Settings, get_settings
from app.core.security import verify_bearer_token
from app.schemas.freshchat import (
    WorkflowHandleOptionRequest,
    WorkflowStartInteractiveRequest,
    WorkflowStartRequest,
)
from app.schemas.responses import RenderRequest
from app.services.conversation_builder import render_response
from app.services.workflow_service import handle_option, start_workflow, start_workflow_interactive

logger = logging.getLogger(__name__)

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

render_router = APIRouter(
    prefix="/freshchat",
    tags=["render"],
    dependencies=[Depends(verify_bearer_token)],
)


@router.post("/start")
def workflow_start(
    request: WorkflowStartRequest,
    settings: Settings = Depends(get_settings),
) -> dict:
    logger.info("Starting workflow for cliente=%s canal=%s", request.cliente, request.canal)
    return start_workflow(request, settings.default_response_mode)


@router.post("/start-interactive")
def workflow_start_interactive(
    request: WorkflowStartInteractiveRequest,
    settings: Settings = Depends(get_settings),
) -> dict:
    logger.info(
        (
            "Sending interactive workflow menu for cliente=%s conversation_id=%s "
            "conversationAlias=%s conversation_alias=%s conversationId=%s"
        ),
        request.cliente,
        request.conversation_id,
        request.conversationAlias,
        request.conversation_alias,
        request.conversationId,
    )
    return start_workflow_interactive(request, settings)


@router.post("/handle-option")
def workflow_handle_option(
    request: WorkflowHandleOptionRequest,
    settings: Settings = Depends(get_settings),
) -> dict:
    logger.info("Handling workflow option for cliente=%s canal=%s", request.cliente, request.canal)
    return handle_option(request, settings.default_response_mode)


@render_router.post("/render")
def render_for_freshchat(request: RenderRequest) -> dict:
    return render_response(request.payload, request.mode)


@render_router.post("/debug/echo")
async def debug_echo(request: Request) -> dict:
    body = await request.json()
    logger.info("Freshchat debug echo body=%s", body)
    return {
        "error": "false",
        "mensaje": "Debug recibido.",
        "response_type": "text",
        "data": {
            "received": body,
        },
    }
