-- Sprint 24B — Motor interno de ciclos de suscripción
-- Sin pasarelas ni cargos reales.

ALTER TABLE billing_suscripciones
  MODIFY estado ENUM('trial','activa','past_due','pausada','cancelada','vencida') NOT NULL DEFAULT 'trial';

ALTER TABLE billing_suscripciones
  ADD COLUMN IF NOT EXISTS ultimo_ciclo_procesado_en DATETIME NULL AFTER gracia_hasta,
  ADD COLUMN IF NOT EXISTS congelada_en DATETIME NULL AFTER ultimo_ciclo_procesado_en,
  ADD COLUMN IF NOT EXISTS motivo_estado VARCHAR(190) NULL AFTER congelada_en;

ALTER TABLE billing_suscripcion_eventos
  MODIFY tipo ENUM(
    'creada','trial_iniciado','plan_cambiado','checkout_creado',
    'cancelacion_programada','cancelada','reactivada','renovada',
    'pago_fallido','pago_recuperado','pausada','vencida','ajuste_manual',
    'limite_denegado','downgrade_programado','downgrade_aplicado',
    'trial_vencido','addon_activado','addon_cancelado','addon_vencido',
    'gracia_iniciada','gracia_recuperada','congelada',
    'cancelacion_aplicada','ciclo_procesado','cambio_programado_aplicado'
  ) NOT NULL;

CREATE INDEX IF NOT EXISTS idx_billing_suscripciones_ciclo
  ON billing_suscripciones(estado,periodo_fin,cancelar_al_fin,cambio_programado_en);

CREATE INDEX IF NOT EXISTS idx_billing_suscripciones_gracia
  ON billing_suscripciones(estado,gracia_hasta);
