USE gps;

CREATE TABLE IF NOT EXISTS `sms_contactos` (
    `id_contacto` INT AUTO_INCREMENT PRIMARY KEY,
    `nombre` VARCHAR(255) NOT NULL,
    `telefono` VARCHAR(20) NOT NULL,
    `tipo` VARCHAR(50) DEFAULT 'otro',
    `notas` TEXT,
    `fecha_creacion` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `creado_por` VARCHAR(100),
    `activo` TINYINT(1) DEFAULT 1,
    UNIQUE KEY `unique_telefono` (`telefono`),
    KEY `idx_tipo` (`tipo`),
    KEY `idx_activo` (`activo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `sms_plantillas` (
    `id_plantilla` INT AUTO_INCREMENT PRIMARY KEY,
    `nombre` VARCHAR(255) NOT NULL,
    `mensaje` TEXT NOT NULL,
    `categoria` VARCHAR(50) DEFAULT 'otro',
    `fecha_creacion` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `fecha_actualizacion` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `creado_por` VARCHAR(100),
    `activo` TINYINT(1) DEFAULT 1,
    UNIQUE KEY `unique_nombre` (`nombre`),
    KEY `idx_categoria` (`categoria`),
    KEY `idx_activo` (`activo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `sms_mensajes` (
    `id_mensaje` INT AUTO_INCREMENT PRIMARY KEY,
    `telefono` VARCHAR(20) NOT NULL,
    `mensaje` TEXT NOT NULL,
    `tipo` ENUM('enviado', 'recibido') DEFAULT 'enviado',
    `estado` ENUM('pendiente', 'enviando', 'enviado', 'entregado', 'fallido', 'error') DEFAULT 'pendiente',
    `fecha_envio` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `fecha_entrega` DATETIME NULL,
    `enviado_por` VARCHAR(100),
    `id_contacto` INT NULL,
    `id_plantilla` INT NULL,
    `id_emp` INT DEFAULT 0,
    `error_mensaje` TEXT NULL,
    KEY `idx_telefono` (`telefono`),
    KEY `idx_fecha_envio` (`fecha_envio`),
    KEY `idx_estado` (`estado`),
    KEY `idx_tipo` (`tipo`),
    KEY `idx_id_contacto` (`id_contacto`),
    KEY `idx_id_plantilla` (`id_plantilla`),
    KEY `idx_id_emp` (`id_emp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `sms_envios_masivos` (
    `id_envio_masivo` INT AUTO_INCREMENT PRIMARY KEY,
    `nombre_envio` VARCHAR(255) NULL,
    `mensaje` TEXT NOT NULL,
    `total_destinatarios` INT DEFAULT 0,
    `enviados_exitosos` INT DEFAULT 0,
    `enviados_fallidos` INT DEFAULT 0,
    `estado` ENUM('pendiente', 'en_proceso', 'completado', 'cancelado', 'error') DEFAULT 'pendiente',
    `fecha_inicio` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `fecha_fin` DATETIME NULL,
    `creado_por` VARCHAR(100),
    `id_plantilla` INT NULL,
    KEY `idx_estado` (`estado`),
    KEY `idx_fecha_inicio` (`fecha_inicio`),
    KEY `idx_creado_por` (`creado_por`),
    KEY `idx_id_plantilla` (`id_plantilla`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `sms_destinatarios_masivos` (
    `id_destinatario` INT AUTO_INCREMENT PRIMARY KEY,
    `id_envio_masivo` INT NOT NULL,
    `telefono` VARCHAR(20) NOT NULL,
    `nombre` VARCHAR(255) NULL,
    `estado` ENUM('pendiente', 'enviado', 'entregado', 'fallido') DEFAULT 'pendiente',
    `fecha_envio` DATETIME NULL,
    `fecha_entrega` DATETIME NULL,
    `error_mensaje` TEXT NULL,
    `id_mensaje` INT NULL,
    KEY `idx_id_envio_masivo` (`id_envio_masivo`),
    KEY `idx_telefono` (`telefono`),
    KEY `idx_estado` (`estado`),
    KEY `idx_id_mensaje` (`id_mensaje`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `sms_mensajes` 
ADD CONSTRAINT `fk_sms_contacto` FOREIGN KEY (`id_contacto`) REFERENCES `sms_contactos` (`id_contacto`) ON DELETE SET NULL,
ADD CONSTRAINT `fk_sms_plantilla` FOREIGN KEY (`id_plantilla`) REFERENCES `sms_plantillas` (`id_plantilla`) ON DELETE SET NULL;

ALTER TABLE `sms_envios_masivos` 
ADD CONSTRAINT `fk_sms_masivo_plantilla` FOREIGN KEY (`id_plantilla`) REFERENCES `sms_plantillas` (`id_plantilla`) ON DELETE SET NULL;

ALTER TABLE `sms_destinatarios_masivos` 
ADD CONSTRAINT `fk_sms_envio_masivo` FOREIGN KEY (`id_envio_masivo`) REFERENCES `sms_envios_masivos` (`id_envio_masivo`) ON DELETE CASCADE,
ADD CONSTRAINT `fk_sms_dest_mensaje` FOREIGN KEY (`id_mensaje`) REFERENCES `sms_mensajes` (`id_mensaje`) ON DELETE SET NULL;
