-- =====================================================
-- TRIGGERS PARA ACTUALIZACIÓN AUTOMÁTICA DE SALDO CxP
-- Los triggers están en la tabla cxp_pagos y actualizan cxp_cargos.saldo
-- =====================================================

DELIMITER $$

-- Trigger: Actualizar saldo cuando se INSERTA un pago
DROP TRIGGER IF EXISTS trg_cxp_pago_insert$$
CREATE TRIGGER trg_cxp_pago_insert
AFTER INSERT ON cxp_pagos
FOR EACH ROW
BEGIN
    -- Disminuir el saldo del cargo si existe un id_cargo asociado
    IF NEW.id_cargo IS NOT NULL THEN
        UPDATE cxp_cargos 
        SET saldo = saldo - NEW.monto_pago
        WHERE id_cargo = NEW.id_cargo;
    END IF;
END$$

-- Trigger: Actualizar saldo cuando se ACTUALIZA un pago
DROP TRIGGER IF EXISTS trg_cxp_pago_update$$
CREATE TRIGGER trg_cxp_pago_update
AFTER UPDATE ON cxp_pagos
FOR EACH ROW
BEGIN
    -- Revertir el monto anterior si había un cargo asociado
    IF OLD.id_cargo IS NOT NULL THEN
        UPDATE cxp_cargos 
        SET saldo = saldo + OLD.monto_pago
        WHERE id_cargo = OLD.id_cargo;
    END IF;
    
    -- Aplicar el nuevo monto si hay un cargo asociado
    IF NEW.id_cargo IS NOT NULL THEN
        UPDATE cxp_cargos 
        SET saldo = saldo - NEW.monto_pago
        WHERE id_cargo = NEW.id_cargo;
    END IF;
END$$

-- Trigger: Actualizar saldo cuando se ELIMINA un pago
DROP TRIGGER IF EXISTS trg_cxp_pago_delete$$
CREATE TRIGGER trg_cxp_pago_delete
AFTER DELETE ON cxp_pagos
FOR EACH ROW
BEGIN
    -- Revertir el monto (aumentar el saldo) si había un cargo asociado
    IF OLD.id_cargo IS NOT NULL THEN
        UPDATE cxp_cargos 
        SET saldo = saldo + OLD.monto_pago
        WHERE id_cargo = OLD.id_cargo;
    END IF;
END$$

DELIMITER ;

-- =====================================================
-- Verificar que los triggers fueron creados
-- =====================================================
SHOW TRIGGERS WHERE `Table` = 'cxp_pagos';
