-- Fallback manual del módulo WhatsApp.
-- Normalmente no hace falta ejecutarlo porque config/whatsapp_schema.php crea
-- las tablas de forma idempotente al cargar el sistema.

CREATE TABLE IF NOT EXISTS whatsapp_configuracion (
    id TINYINT UNSIGNED NOT NULL DEFAULT 1,
    automatizacion_activa TINYINT(1) NOT NULL DEFAULT 0,
    mensaje_bienvenida TEXT NOT NULL,
    mensaje_no_reconocido TEXT NOT NULL,
    zona_horaria VARCHAR(60) NOT NULL DEFAULT 'America/Lima',
    creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS whatsapp_horarios (
    id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
    dia_semana TINYINT UNSIGNED NOT NULL,
    atencion_humana_activa TINYINT(1) NOT NULL DEFAULT 1,
    hora_inicio TIME DEFAULT NULL,
    hora_fin TIME DEFAULT NULL,
    actualizado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_whatsapp_horario_dia (dia_semana)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS whatsapp_reglas (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    nombre VARCHAR(120) NOT NULL,
    palabras_clave TEXT NOT NULL,
    respuesta TEXT NOT NULL,
    prioridad SMALLINT UNSIGNED NOT NULL DEFAULT 100,
    activa TINYINT(1) NOT NULL DEFAULT 1,
    creado_por INT UNSIGNED DEFAULT NULL,
    actualizado_por INT UNSIGNED DEFAULT NULL,
    creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_whatsapp_reglas_activas (activa, prioridad)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS whatsapp_conversaciones (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    telefono VARCHAR(32) NOT NULL,
    nombre_contacto VARCHAR(140) DEFAULT NULL,
    estado VARCHAR(30) NOT NULL DEFAULT 'abierta',
    requiere_humano TINYINT(1) NOT NULL DEFAULT 0,
    ultimo_mensaje_en DATETIME DEFAULT NULL,
    creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_whatsapp_conversacion_telefono (telefono),
    KEY idx_whatsapp_conversaciones_estado (estado, requiere_humano),
    KEY idx_whatsapp_conversaciones_ultimo (ultimo_mensaje_en)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS whatsapp_mensajes (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    conversacion_id BIGINT UNSIGNED NOT NULL,
    wamid VARCHAR(180) DEFAULT NULL,
    direccion ENUM('entrante','saliente') NOT NULL,
    tipo VARCHAR(30) NOT NULL DEFAULT 'texto',
    contenido TEXT DEFAULT NULL,
    regla_id INT UNSIGNED DEFAULT NULL,
    respuesta_automatica TINYINT(1) NOT NULL DEFAULT 0,
    estado_envio VARCHAR(30) DEFAULT NULL,
    creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_whatsapp_mensaje_wamid (wamid),
    KEY idx_whatsapp_mensajes_conversacion (conversacion_id, creado_en),
    KEY idx_whatsapp_mensajes_regla (regla_id),
    CONSTRAINT fk_whatsapp_mensajes_conversacion FOREIGN KEY (conversacion_id)
        REFERENCES whatsapp_conversaciones(id) ON DELETE CASCADE,
    CONSTRAINT fk_whatsapp_mensajes_regla FOREIGN KEY (regla_id)
        REFERENCES whatsapp_reglas(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO whatsapp_configuracion
    (id, automatizacion_activa, mensaje_bienvenida, mensaje_no_reconocido, zona_horaria)
SELECT 1, 0,
    '¡Hola! Gracias por comunicarte con IPHCI. En este momento nuestro equipo no se encuentra disponible, pero podemos ayudarte con algunas consultas frecuentes.',
    'Gracias por escribirnos. En este momento nuestro equipo se encuentra fuera del horario de atención y no contamos con una respuesta automática para esa consulta. Un asesor continuará contigo cuando retomemos la atención.',
    'America/Lima'
WHERE NOT EXISTS (SELECT 1 FROM whatsapp_configuracion WHERE id = 1);

INSERT INTO whatsapp_horarios (dia_semana, atencion_humana_activa, hora_inicio, hora_fin)
VALUES
    (1,1,'08:00:00','17:00:00'),
    (2,1,'08:00:00','17:00:00'),
    (3,1,'08:00:00','17:00:00'),
    (4,1,'08:00:00','17:00:00'),
    (5,1,'08:00:00','17:00:00'),
    (6,0,NULL,NULL),
    (7,0,NULL,NULL)
ON DUPLICATE KEY UPDATE dia_semana = VALUES(dia_semana);

INSERT INTO modulos_sistema (clave, nombre, grupo, orden, activo)
SELECT 'whatsapp', 'WhatsApp', 'gestion', 40, 1
WHERE NOT EXISTS (SELECT 1 FROM modulos_sistema WHERE clave = 'whatsapp');

INSERT INTO usuarios_permisos (usuario_id, modulo_id, puede_ver, puede_modificar)
SELECT u.id, m.id, 1, 1
FROM usuarios_sistema u
INNER JOIN modulos_sistema m ON m.clave = 'whatsapp'
LEFT JOIN usuarios_permisos p ON p.usuario_id = u.id AND p.modulo_id = m.id
WHERE u.rol = 'marketing' AND p.usuario_id IS NULL;
