from app.schemas.common import ResponseMode
from app.schemas.encuesta import EncuestaQuestionRequest, EncuestaSaveRequest, EncuestaStartRequest
from app.schemas.responses import ButtonOption
from app.services.conversation_builder import (
    build_buttons_response,
    build_rating_response,
    success_response,
    render_response,
)


SURVEY_QUESTIONS = {
    "rapidez": "¿La respuesta del agente en el chat fue rápida?",
    "amabilidad": "¿El agente fue amable y profesional durante la conversación?",
    "resolucion": "¿Cómo calificaría la resolución de su conversación con el agente?",
}


def start_survey(request: EncuestaStartRequest, mode: ResponseMode) -> dict:
    internal_response = build_buttons_response(
        mensaje="MacroBase valora enormemente la oportunidad de brindarle el mejor servicio posible.",
        text=(
            "MacroBase valora enormemente la oportunidad de brindarle el mejor servicio posible. "
            "¿Podría responder 3 preguntas acerca de su experiencia en nuestro chat?"
        ),
        buttons=[
            ButtonOption(id="si", title="Sí"),
            ButtonOption(id="no", title="No"),
        ],
        fallback_text="Responde Sí o No.",
    )
    if not request.supports_interactive:
        return render_response(internal_response, "fallback")
    return render_response(internal_response, mode)


def get_survey_question(request: EncuestaQuestionRequest, mode: ResponseMode) -> dict:
    question = SURVEY_QUESTIONS[request.step]
    internal_response = build_rating_response(
        mensaje=question,
        text=question,
        fallback_text="Por favor responde con un número del 1 al 5.",
        labels={"1": "Muy malo", "5": "Excelente"},
    )
    if not request.supports_interactive:
        return render_response(internal_response, "fallback")
    return render_response(internal_response, mode)


def save_survey(request: EncuestaSaveRequest) -> dict:
    promedio = round((request.rapidez + request.amabilidad + request.resolucion) / 3, 2)
    mensaje = (
        "Como equipo de MacroBase, agradecemos sinceramente su participación en la encuesta 🙏 "
        "Valoramos enormemente sus comentarios, ya que son de gran importancia para nuestro "
        "proceso de mejora continua. 💫 Fue un gusto atenderle."
    )
    return success_response(
        mensaje=mensaje,
        response_type="text",
        data={
            "messages": [{"type": "text", "text": mensaje}],
            "promedio": promedio,
        },
    )

