-- ============================================================================
-- Gestión de Consultas — Núcleo (Consultas por día + confirmación desde la app)
-- Migración 100% ADITIVA sobre prannetc_hde_app (la misma base de app.hde/panel.hde).
-- No borra ni modifica ningún dato existente. Ejecútala UNA sola vez, de preferencia
-- primero contra una copia/backup de la base, nunca directo en producción sin probar.
-- ============================================================================

-- ----------------------------------------------------------------------------
-- PASO 0 (hazlo tú, antes de correr nada de este archivo): verifica los valores
-- actuales de usuarios.rol para no perder ninguno al ampliar el ENUM.
--   SHOW COLUMNS FROM usuarios LIKE 'rol';
-- Copia la lista de valores que te devuelva (debería verse algo como
-- paciente/especialista/admin) y complétala en el PASO 1 de abajo, dentro del
-- ENUM nuevo, antes de los 4 roles nuevos. El ejemplo de abajo asume
-- 'paciente','especialista','admin' — AJÚSTALO si tu lista real es distinta.
-- ----------------------------------------------------------------------------

-- PASO 1: agrega los 4 roles de personal nuevos (Soporte/Gerencia/Administradora/
-- Secretaria) sin quitar ninguno de los que ya existían.
ALTER TABLE usuarios
  MODIFY COLUMN rol ENUM('paciente','especialista','admin','soporte','gerencia','administradora','secretaria')
  NOT NULL;
-- Nota: 'profesional' (como se le llama en la interfaz de Gestión de Consultas) usa
-- el valor YA EXISTENTE 'especialista' — no se agrega un rol nuevo para eso.

-- PASO 2: columnas nuevas en `citas`, todas opcionales (DEFAULT o NULL), no
-- afectan ninguna fila existente ni ningún flujo que ya use esta tabla hoy.
-- Si tu MySQL/MariaDB soporta "ADD COLUMN IF NOT EXISTS" puedes dejarlo así;
-- si da error de sintaxis, quita el "IF NOT EXISTS" de cada línea (ejecuta cada
-- ALTER solo una vez en ese caso).
ALTER TABLE citas ADD COLUMN IF NOT EXISTS estado_seguimiento
  ENUM('atendida','espera_a_tiempo','espera_tarde','programada','no_asistio','cancelada','reprogramada','sin_estado')
  NOT NULL DEFAULT 'sin_estado'
  COMMENT 'Estado de seguimiento al estilo hde-consultas. Independiente del estado de reserva/pago que ya use esta tabla.';

ALTER TABLE citas ADD COLUMN IF NOT EXISTS origen
  ENUM('manual','app') NOT NULL DEFAULT 'manual'
  COMMENT 'manual = la registró el personal; app = la agendó la paciente en app.hde';

ALTER TABLE citas ADD COLUMN IF NOT EXISTS confirmada
  TINYINT(1) NOT NULL DEFAULT 1
  COMMENT 'Para origen=app empieza en 0 hasta que Secretaria/Administradora/Gerencia/Soporte la confirma';

ALTER TABLE citas ADD COLUMN IF NOT EXISTS comprobante_app_metodo    VARCHAR(60)  NULL;
ALTER TABLE citas ADD COLUMN IF NOT EXISTS comprobante_app_monto     DECIMAL(8,2) NULL;
ALTER TABLE citas ADD COLUMN IF NOT EXISTS comprobante_app_archivo   VARCHAR(255) NULL
  COMMENT 'Nombre/ruta del comprobante que la paciente adjuntó al agendar desde la app';
ALTER TABLE citas ADD COLUMN IF NOT EXISTS comprobante_seguimiento   VARCHAR(160) NULL
  COMMENT 'Comprobante oficial de la cita ya confirmada (se completa solo al confirmar una cita de origen app)';
ALTER TABLE citas ADD COLUMN IF NOT EXISTS meet_link                 VARCHAR(255) NULL
  COMMENT 'Enlace de videollamada para citas virtuales; lo pega Secretaria/Administradora al confirmar';
ALTER TABLE citas ADD COLUMN IF NOT EXISTS reprogramada_a            VARCHAR(60)  NULL;
ALTER TABLE citas ADD COLUMN IF NOT EXISTS seguimiento_obs           VARCHAR(500) NULL
  COMMENT 'Próxima cita / observaciones que registra el personal después del agendamiento';
ALTER TABLE citas ADD COLUMN IF NOT EXISTS agenda_smart              TINYINT(1)   NOT NULL DEFAULT 0;
ALTER TABLE citas ADD COLUMN IF NOT EXISTS actualizado_en            DATETIME     NULL;

ALTER TABLE citas ADD INDEX IF NOT EXISTS idx_citas_fecha_especialista (fecha, especialista_id);
ALTER TABLE citas ADD INDEX IF NOT EXISTS idx_citas_origen_confirmada (origen, confirmada);

-- PASO 3: tabla nueva para frenar fuerza bruta en el login (mismo propósito que
-- `ca_login_intentos` en hde-consultas). No existe en prannetc_hde_app todavía.
CREATE TABLE IF NOT EXISTS login_intentos (
  id         BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  correo     VARCHAR(190) NOT NULL,
  ip         VARCHAR(45)  NOT NULL,
  creado_en  DATETIME     NOT NULL,
  INDEX idx_login_intentos_correo (correo, creado_en)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================================
-- Fin del núcleo. Lo que falta (Horarios/turnos libres, Liquidación, Trazabilidad,
-- Importar Excel, Usuarios, Configuración, Soporte) llega en los siguientes
-- incrementos, cada uno con su propio script aditivo — no se adelanta nada aquí
-- para mantener cada entrega aislada y fácil de revisar.
-- ============================================================================
