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

DELIMITER $$

-- Trigger: Actualizar saldo cuando se INSERTA un pago de cliente
DROP TRIGGER IF EXISTS trg_cxc_pago_insert$$
CREATE TRIGGER trg_cxc_pago_insert
AFTER INSERT ON cxc_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 cxc_cargos 
        SET saldo = saldo - NEW.monto_pago
        WHERE id_cargo = NEW.id_cargo;
    END IF;
END$$

-- Trigger: Actualizar saldo cuando se ACTUALIZA un pago de cliente
DROP TRIGGER IF EXISTS trg_cxc_pago_update$$
CREATE TRIGGER trg_cxc_pago_update
AFTER UPDATE ON cxc_pagos
FOR EACH ROW
BEGIN
    -- Revertir el monto anterior si había un cargo asociado
    IF OLD.id_cargo IS NOT NULL THEN
        UPDATE cxc_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 cxc_cargos 
        SET saldo = saldo - NEW.monto_pago
        WHERE id_cargo = NEW.id_cargo;
    END IF;
END$$

-- Trigger: Actualizar saldo cuando se ELIMINA un pago de cliente
DROP TRIGGER IF EXISTS trg_cxc_pago_delete$$
CREATE TRIGGER trg_cxc_pago_delete
AFTER DELETE ON cxc_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 cxc_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` = 'cxc_pagos';
