-- ============================================================
--  Rollback de 2026-09-04_01_pago_por_recepcion.sql
-- ============================================================
USE tinsa_db;

ALTER TABLE orden_compra
  ADD COLUMN estado_pago         ENUM('no_aplica','pendiente','pagada') NOT NULL DEFAULT 'pendiente' AFTER fecha_recepcion,
  ADD COLUMN fecha_pago_estimada DATE NULL AFTER estado_pago,
  ADD COLUMN fecha_pago          DATETIME NULL AFTER fecha_pago_estimada,
  ADD COLUMN referencia_pago     VARCHAR(80) NULL AFTER fecha_pago,
  ADD COLUMN id_usuario_pago     INT UNSIGNED NULL AFTER referencia_pago;

ALTER TABLE orden_compra
  ADD CONSTRAINT fk_orden_compra_usuario_pago
    FOREIGN KEY (id_usuario_pago) REFERENCES usuarios (id_usuario) ON DELETE SET NULL ON UPDATE CASCADE;

CREATE INDEX idx_orden_compra_pago ON orden_compra (estado_pago, fecha_pago_estimada);

-- Backfill best-effort: toma el pago de la recepción más reciente de cada orden.
UPDATE orden_compra oc
JOIN (
  SELECT id_orden, MAX(id) AS id_ultima FROM orden_compra_recepcion GROUP BY id_orden
) u ON u.id_orden = oc.id
JOIN orden_compra_recepcion r ON r.id = u.id_ultima
SET oc.estado_pago         = r.estado_pago,
    oc.fecha_pago_estimada = r.fecha_pago_estimada,
    oc.fecha_pago          = r.fecha_pago,
    oc.referencia_pago     = r.referencia_pago,
    oc.id_usuario_pago     = r.id_usuario_pago
WHERE r.estado_pago <> 'no_aplica';

ALTER TABLE orden_compra_recepcion
  DROP FOREIGN KEY fk_orden_compra_recepcion_usuario_pago,
  DROP INDEX idx_orden_compra_recepcion_pago,
  DROP COLUMN monto,
  DROP COLUMN estado_pago,
  DROP COLUMN fecha_pago_estimada,
  DROP COLUMN fecha_pago,
  DROP COLUMN referencia_pago,
  DROP COLUMN id_usuario_pago;
