-- Bovintel F29: preparación de órdenes, auditoría y modo observación
-- Ejecutar una sola vez en la base de datos de la plataforma.

CREATE TABLE IF NOT EXISTS collar_ordenes_f29 (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  collar_id INT NULL,
  teid VARCHAR(32) NOT NULL,
  imei VARCHAR(30) NULL,
  animal_id VARCHAR(50) NULL,
  animal_nombre VARCHAR(150) NULL,
  usuario_id INT NULL,
  usuario_nombre VARCHAR(150) NULL,
  usuario_rol VARCHAR(50) NULL,
  tipo ENUM('DESCARGA','DETENCION','ALERTA') NOT NULL,
  nivel TINYINT UNSIGNED NOT NULL DEFAULT 0,
  origen ENUM('MANUAL','CERCA_VIRTUAL') NOT NULL DEFAULT 'MANUAL',
  estado ENUM('PENDIENTE','ENVIADO','CONFIRMADO','FALLIDO') NOT NULL DEFAULT 'PENDIENTE',
  comando VARCHAR(255) NOT NULL,
  respuesta_raw TEXT NULL,
  error_text TEXT NULL,
  seguridad_json TEXT NULL,
  external_command_id VARCHAR(100) NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  sent_at DATETIME NULL,
  confirmed_at DATETIME NULL,
  failed_at DATETIME NULL,
  PRIMARY KEY (id),
  KEY idx_f29_teid_fecha (teid, created_at),
  KEY idx_f29_estado (estado),
  KEY idx_f29_collar (collar_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- La intensidad real confirmada por el fabricante es 1, 2 o 3.
-- Tinyint ya admite esos valores; no hace falta alterar el tipo.

-- Deja todas las cercas actuales en modo de observación hasta activar transporte.
UPDATE cerca_virtual_config
SET modo='observacion', updated_at=CURRENT_TIMESTAMP
WHERE modo IN ('alerta','pre-choque','choque');
