from enum import Enum
from typing import Any, Literal

from pydantic import BaseModel, ConfigDict, EmailStr, Field


ErrorString = Literal["false", "true"]
ResponseType = Literal["text", "buttons", "quick_replies", "list", "rating", "mixed"]
ResponseMode = Literal["internal", "freshchat_simple", "fallback"]
Channel = Literal["whatsapp", "webchat", "freshchat"]


class APIBaseModel(BaseModel):
    model_config = ConfigDict(populate_by_name=True, str_strip_whitespace=True)


class ErrorResponse(APIBaseModel):
    error: ErrorString = "true"
    mensaje: str
    response_type: Literal["text"] = "text"
    data: dict[str, Any] = Field(default_factory=dict)


class CustomerContext(APIBaseModel):
    cliente: str
    nombreCompleto: str | None = None
    nombre: str | None = None
    telefono: str | None = None
    email: EmailStr | None = None


class InteractiveContext(APIBaseModel):
    canal: Channel = "freshchat"
    supports_interactive: bool = True


class KnownOption(str, Enum):
    emergencia_cobro = "emergencia_cobro"
    soporte = "soporte"
    implementacion = "implementacion"
    ventas = "ventas"
    administracion = "administracion"
    mbia = "mbia"
