-- Script para crear la tabla de planes
-- Incluye la versión desktop y las dos versiones online (Estándar y Premium)
-- Ejecutar este script en la base de datos MySQL

-- Tabla de planes
CREATE TABLE IF NOT EXISTS planes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(255) NOT NULL,
  tipo ENUM('desktop', 'online') NOT NULL,
  codigo VARCHAR(50) NOT NULL UNIQUE,
  descripcion TEXT NULL,
  precio DECIMAL(10, 2) NOT NULL,
  moneda VARCHAR(10) NOT NULL DEFAULT 'COP',
  consultas_incluidas INT NULL COMMENT 'NULL para consultas ilimitadas',
  duracion_meses INT NULL COMMENT 'NULL para pago único, número de meses para suscripciones',
  tipo_pago ENUM('unico', 'paquete', 'suscripcion') NOT NULL,
  features JSON NULL COMMENT 'Array JSON con las características del plan',
  popular TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Indica si el plan es popular/recomendado',
  activo TINYINT(1) NOT NULL DEFAULT 1,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_tipo (tipo),
  INDEX idx_codigo (codigo),
  INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insertar planes iniciales

-- Plan Desktop Windows
INSERT INTO planes (nombre, tipo, codigo, descripcion, precio, moneda, consultas_incluidas, duracion_meses, tipo_pago, features, popular, activo)
VALUES (
  'Desktop Windows',
  'desktop',
  'DESKTOP',
  'Licencia local para instalar en un equipo Windows 10/11 y ejecutar lotes masivos sin depender del navegador.',
  120000.00,
  'COP',
  NULL, -- Consultas ilimitadas
  NULL, -- Pago único
  'unico',
  JSON_ARRAY(
    'Consultas ilimitadas incluidas desde el primer día',
    'Ejecución directa sobre Windows 10/11 (64 bits)',
    'Ideal para puestos dedicados en oficina o servidores locales',
    'Soporte prioritario y actualizaciones automáticas'
  ),
  1, -- Popular
  1
) ON DUPLICATE KEY UPDATE
  nombre = VALUES(nombre),
  descripcion = VALUES(descripcion),
  precio = VALUES(precio),
  features = VALUES(features),
  popular = VALUES(popular),
  updated_at = CURRENT_TIMESTAMP;

-- Plan Online Estándar
INSERT INTO planes (nombre, tipo, codigo, descripcion, precio, moneda, consultas_incluidas, duracion_meses, tipo_pago, features, popular, activo)
VALUES (
  'Online Estándar',
  'online',
  'ONLINE_ESTANDAR',
  'Accede desde el navegador para validar hasta 6.000 registros mensuales sin instalaciones.',
  89000.00,
  'COP',
  6000, -- 6.000 consultas incluidas
  NULL, -- Pago por paquete (sin duración fija)
  'paquete',
  JSON_ARRAY(
    'Acceso multiusuario desde cualquier dispositivo',
    'Historial y evidencia descargable en segundos',
    'Renovación automática y soporte por chat en horario laboral',
    'Upgrade inmediato al plan Premium cuando lo necesites'
  ),
  0, -- No popular
  1
) ON DUPLICATE KEY UPDATE
  nombre = VALUES(nombre),
  descripcion = VALUES(descripcion),
  precio = VALUES(precio),
  consultas_incluidas = VALUES(consultas_incluidas),
  features = VALUES(features),
  popular = VALUES(popular),
  updated_at = CURRENT_TIMESTAMP;

-- Plan Online Premium
INSERT INTO planes (nombre, tipo, codigo, descripcion, precio, moneda, consultas_incluidas, duracion_meses, tipo_pago, features, popular, activo)
VALUES (
  'Online Premium',
  'online',
  'ONLINE_PREMIUM',
  'Para operaciones de alto volumen que requieren consultas ilimitadas en la nube durante seis meses.',
  249000.00,
  'COP',
  NULL, -- Consultas ilimitadas
  6, -- Duración de 6 meses
  'suscripcion',
  JSON_ARRAY(
    'Consultas ilimitadas en la nube con prioridad de procesamiento',
    'Usuarios ilimitados dentro de tu organización',
    'Incluye acompañamiento estratégico y sesiones de revisión',
    'Renovable cada 6 meses manteniendo tu historial'
  ),
  0, -- No popular
  1
) ON DUPLICATE KEY UPDATE
  nombre = VALUES(nombre),
  descripcion = VALUES(descripcion),
  precio = VALUES(precio),
  duracion_meses = VALUES(duracion_meses),
  features = VALUES(features),
  popular = VALUES(popular),
  updated_at = CURRENT_TIMESTAMP;

