-- ============================================================
-- NÉBULA OS · Fase 2 — Suscripciones/MRR, Onboarding, Tickets
-- Ejecutar UNA vez: mysql -u USER -p nebula_os < migracion_fase2.sql
-- (o phpMyAdmin > Importar). Todo IF NOT EXISTS = seguro repetir.
-- ============================================================

-- Suscripciones (arriendo mensual por cliente)
CREATE TABLE IF NOT EXISTS suscripciones (
  id INT AUTO_INCREMENT PRIMARY KEY,
  empresa_id INT NOT NULL,
  deal_id INT NULL,
  plan ENUM('web','sistema','combo','custom') DEFAULT 'web',
  titulo VARCHAR(255) NOT NULL,
  valor_mensual INT DEFAULT 0,
  dia_cobro TINYINT DEFAULT 5,
  estado ENUM('activa','pausada','morosa','cancelada') DEFAULT 'activa',
  fecha_inicio DATE NOT NULL,
  fecha_fin DATE NULL,
  notas TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
  FOREIGN KEY (deal_id) REFERENCES deals(id) ON DELETE SET NULL,
  INDEX idx_sus_empresa (empresa_id),
  INDEX idx_sus_estado (estado)
);

-- Cobros mensuales generados
CREATE TABLE IF NOT EXISTS cobros (
  id INT AUTO_INCREMENT PRIMARY KEY,
  suscripcion_id INT NOT NULL,
  periodo CHAR(7) NOT NULL COMMENT 'YYYY-MM',
  monto INT NOT NULL,
  estado ENUM('pendiente','pagado','vencido') DEFAULT 'pendiente',
  fecha_pago DATE NULL,
  metodo VARCHAR(50) NULL,
  notas TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (suscripcion_id) REFERENCES suscripciones(id) ON DELETE CASCADE,
  UNIQUE KEY uq_cobro_periodo (suscripcion_id, periodo),
  INDEX idx_cobros_estado (estado),
  INDEX idx_cobros_periodo (periodo)
);

-- Checklist de onboarding por suscripción
CREATE TABLE IF NOT EXISTS onboarding_pasos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  suscripcion_id INT NOT NULL,
  titulo VARCHAR(255) NOT NULL,
  orden INT DEFAULT 0,
  hecho BOOLEAN DEFAULT FALSE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (suscripcion_id) REFERENCES suscripciones(id) ON DELETE CASCADE,
  INDEX idx_onb_sus (suscripcion_id)
);

-- Tickets de soporte
CREATE TABLE IF NOT EXISTS tickets (
  id INT AUTO_INCREMENT PRIMARY KEY,
  empresa_id INT NOT NULL,
  suscripcion_id INT NULL,
  asunto VARCHAR(255) NOT NULL,
  detalle TEXT,
  tipo ENUM('cambio_contenido','soporte','mejora','reclamo') DEFAULT 'soporte',
  prioridad ENUM('baja','media','alta') DEFAULT 'media',
  estado ENUM('abierto','en_proceso','resuelto','cerrado') DEFAULT 'abierto',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
  FOREIGN KEY (suscripcion_id) REFERENCES suscripciones(id) ON DELETE SET NULL,
  INDEX idx_tickets_empresa (empresa_id),
  INDEX idx_tickets_estado (estado)
);
