"""MCP (Model Context Protocol) tool definitions for the Cotizador API.

Each tool is designed to be semantically clear for AI agents like OpenClaw, Claude, and ChatGPT.
"""

TOOLS = [
    {
        "name": "buscar_servicios",
        "description": (
            "Busca servicios del catálogo de marketing digital de Consultoría E3. "
            "Útil cuando el cliente pregunta por servicios disponibles, precios, o por fase del proyecto. "
            "Las fases son: 0=Auditoría (diagnóstico inicial), 1=Setup (infraestructura y configuración), "
            "2=Publicidad (anuncios y manejo de redes), 3=Contenido/SEO (producción de contenido y posicionamiento). "
            "Tipos de pago: 'unico' (pago único) o 'mensual' (recurso recurrente)."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "fase": {
                    "type": "integer",
                    "enum": [0, 1, 2, 3],
                    "description": "Fase del proyecto: 0=Auditoría/Acompañamiento, 1=Setup/Infraestructura, 2=Publicidad/Manejo, 3=Contenido/SEO",
                },
                "tipo_pago": {
                    "type": "string",
                    "enum": ["unico", "mensual"],
                    "description": "Tipo de pago: 'unico' para pago único, 'mensual' para recurrente",
                },
                "categoria": {
                    "type": "string",
                    "description": "Nombre de categoría: SEO, Marketing, Paid Media, Desarrollo Web, Automatizaciones, CRM, Desarrollo Personalizado",
                },
                "busqueda": {
                    "type": "string",
                    "description": "Texto libre para buscar en nombre y descripción del servicio",
                },
            },
        },
    },
    {
        "name": "crear_cotizacion",
        "description": (
            "Crea una cotización completa de servicios de marketing digital para un cliente. "
            "El cliente se crea automáticamente si no existe (busca por nombre+empresa). "
            "Incluye servicios del catálogo con precios personalizables, plan CRM Bucefalo opcional, "
            "y configuración de moneda y esquema de pago. "
            "La cotización se crea en estado 'borrador'. "
            "Precios CRM Bucefalo: basico=$1,000/mes, estandar=$3,500/mes, premium=$4,500/mes, empresarial=$7,500/mes."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cliente": {
                    "type": "object",
                    "properties": {
                        "nombre": {"type": "string", "description": "Nombre completo del contacto"},
                        "empresa": {"type": "string", "description": "Nombre de la empresa (opcional)"},
                        "email": {"type": "string", "description": "Email de contacto"},
                        "telefono": {"type": "string", "description": "Teléfono de contacto"},
                    },
                    "required": ["nombre"],
                },
                "servicios": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "servicio_id": {"type": "string", "description": "ID del servicio del catálogo (obtener con buscar_servicios)"},
                            "precio_personalizado": {"type": "number", "description": "Precio personalizado (opcional, usa precio base si no se especifica)"},
                        },
                        "required": ["servicio_id"],
                    },
                    "description": "Lista de servicios a incluir en la cotización",
                },
                "plan_bucefalo": {
                    "type": "string",
                    "enum": ["basico", "estandar", "premium", "empresarial"],
                    "description": "Nivel del plan CRM Bucefalo (opcional)",
                },
                "proyecto": {
                    "type": "string",
                    "description": "Nombre o descripción del proyecto (default: 'MKT Digital')",
                },
                "moneda": {
                    "type": "string",
                    "enum": ["MXN", "USD"],
                    "description": "Moneda de la cotización (default: MXN)",
                },
                "esquema_pago": {
                    "type": "string",
                    "enum": ["Pago Unico", "Mensual", "Pago Unico/Mensual"],
                    "description": "Esquema de pago (default: Pago Unico/Mensual)",
                },
            },
            "required": ["cliente", "servicios"],
        },
    },
    {
        "name": "obtener_cotizacion",
        "description": (
            "Obtiene los detalles completos de una cotización existente incluyendo: "
            "datos del cliente, servicios seleccionados con precios, estado actual, "
            "plan CRM Bucefalo si aplica, observaciones, fechas y vigencia."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cotizacion_id": {"type": "string", "description": "ID de la cotización"},
            },
            "required": ["cotizacion_id"],
        },
    },
    {
        "name": "listar_cotizaciones",
        "description": (
            "Lista cotizaciones con filtros opcionales. "
            "Útil para revisar el pipeline de ventas, cotizaciones pendientes, o historial de un cliente. "
            "Estados: borrador (en proceso), enviada (esperando respuesta), aprobada (cerrada ganada), rechazada (cerrada perdida)."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "estado": {
                    "type": "string",
                    "enum": ["borrador", "enviada", "aprobada", "rechazada"],
                    "description": "Filtrar por estado",
                },
                "cliente_nombre": {
                    "type": "string",
                    "description": "Buscar por nombre de cliente",
                },
                "busqueda": {
                    "type": "string",
                    "description": "Texto libre para buscar en número, proyecto o cliente",
                },
            },
        },
    },
    {
        "name": "cambiar_estado_cotizacion",
        "description": (
            "Cambia el estado de una cotización. "
            "Flujo normal: borrador → enviada → aprobada o rechazada. "
            "Solo cambiar a 'enviada' cuando la cotización esté lista para el cliente. "
            "Cambiar a 'aprobada' cuando el cliente acepte, o 'rechazada' cuando decline."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cotizacion_id": {"type": "string", "description": "ID de la cotización"},
                "estado": {
                    "type": "string",
                    "enum": ["borrador", "enviada", "aprobada", "rechazada"],
                    "description": "Nuevo estado de la cotización",
                },
            },
            "required": ["cotizacion_id", "estado"],
        },
    },
    {
        "name": "actualizar_precio_servicio",
        "description": (
            "Actualiza el precio de un servicio específico dentro de una cotización. "
            "No modifica el precio base del catálogo, solo el precio en esta cotización. "
            "Útil para negociar precios individuales sin recrear toda la cotización."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cotizacion_id": {"type": "string", "description": "ID de la cotización"},
                "servicio_id": {"type": "string", "description": "ID del servicio cotizado (no el del catálogo)"},
                "nuevo_precio": {"type": "number", "description": "Nuevo precio en la moneda de la cotización"},
            },
            "required": ["cotizacion_id", "servicio_id", "nuevo_precio"],
        },
    },
    {
        "name": "duplicar_cotizacion",
        "description": (
            "Duplica una cotización existente como nueva copia en estado 'borrador'. "
            "Crea una copia exacta con nuevo ID y número. "
            "Útil para crear variaciones de una propuesta o reenviar una cotización actualizada."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cotizacion_id": {"type": "string", "description": "ID de la cotización a duplicar"},
            },
            "required": ["cotizacion_id"],
        },
    },
    {
        "name": "calcular_financiamiento",
        "description": (
            "Calcula las mensualidades para financiar una cotización o monto específico. "
            "Plazos disponibles: 3 meses (7.7% tasa), 6 meses (10.7%), 9 meses (13.7%), 12 meses (16.7%). "
            "Todos incluyen 2.5% de comisión + 16% IVA. "
            "Devuelve: pago mensual, IVA mensual, total mensual, comisión total, y gran total."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "monto": {"type": "number", "description": "Monto total a financiar en MXN"},
                "meses": {"type": "integer", "enum": [3, 6, 9, 12], "description": "Plazo en meses"},
            },
            "required": ["monto", "meses"],
        },
    },
    {
        "name": "generar_pdf_cotizacion",
        "description": (
            "Genera un PDF profesional de una cotización con: logo de la empresa, colores de marca, "
            "tabla de servicios agrupados por fase, bonos incluidos, términos y condiciones, "
            "y datos bancarios para transferencia. Devuelve el archivo PDF."
        ),
        "inputSchema": {
            "type": "object",
            "properties": {
                "cotizacion_id": {"type": "string", "description": "ID de la cotización guardada"},
            },
            "required": ["cotizacion_id"],
        },
    },
    {
        "name": "obtener_configuracion",
        "description": (
            "Obtiene la configuración de la empresa Consultoría E3: "
            "razón social, RFC, domicilio fiscal, datos bancarios (cuenta nacional, CLABE, cuenta internacional, SWIFT), "
            "colores de marca, logo, y términos y condiciones. "
            "Útil para generar documentos o verificar información fiscal."
        ),
        "inputSchema": {"type": "object", "properties": {}},
    },
    {
        "name": "listar_bonos",
        "description": (
            "Lista los bonos/disponibles que se pueden incluir en una cotización: "
            "1) Servicio Centinela Web (monitoreo 30 min/mes), "
            "2) Workshop Buyer Persona, "
            "3) Workshop Propuesta de Valor, "
            "4) Membresía Premium (1 año), "
            "5) Mes Gratis CRM Bucefalo, "
            "6) Script de Ventas (100+ complementos)."
        ),
        "inputSchema": {"type": "object", "properties": {}},
    },
    {
        "name": "listar_planes_bucefalo",
        "description": (
            "Lista los niveles del CRM Bucefalo con precios mensuales: "
            "Básico ($1,000/mes), Estándar ($3,500/mes), Premium ($4,500/mes), Empresarial ($7,500/mes). "
            "Bucefalo es un CRM para gestión de ventas y clientes."
        ),
        "inputSchema": {"type": "object", "properties": {}},
    },
]

RESOURCES = [
    {
        "uri": "cotizador://servicios",
        "name": "Catálogo de Servicios",
        "description": (
            "Lista completa de servicios de marketing digital de Consultoría E3 organizados por fase: "
            "Fase 0 (Auditorías), Fase 1 (Setup/Infraestructura), Fase 2 (Publicidad/Manejo), "
            "Fase 3 (Contenido/SEO). Cada servicio incluye nombre, descripción, precio base, "
            "tiempo de entrega, tipo de pago (único/mensual), y entregables."
        ),
        "mimeType": "application/json",
    },
    {
        "uri": "cotizador://categorias",
        "name": "Categorías de Servicios",
        "description": (
            "Categorías disponibles para clasificar servicios: "
            "SEO, Marketing, Paid Media, Desarrollo Web, Automatizaciones, CRM, Desarrollo Personalizado."
        ),
        "mimeType": "application/json",
    },
    {
        "uri": "cotizador://configuracion",
        "name": "Configuración de la Empresa",
        "description": (
            "Datos fiscales, bancarios y de marca de Consultoría E3. "
            "Incluye razón social, RFC, domicilio fiscal, cuentas bancarias nacionales e internacionales, "
            "colores de marca, logo, y términos y condiciones."
        ),
        "mimeType": "application/json",
    },
]
