-- ============================================================
-- Migration 005: Corregir triggers para respetar estados terminales
-- El trigger anterior sobreescribía 'Realizado', 'Abreviado', 'Cancelado'
-- con 'Agendado' al insertar o actualizar un agendamiento.
-- ============================================================

DROP TRIGGER IF EXISTS trg_ag_after_insert;
DELIMITER $$
CREATE TRIGGER trg_ag_after_insert
AFTER INSERT ON agj_agendamientos
FOR EACH ROW
BEGIN
    DECLARE cnt INT DEFAULT 0;
    DECLARE cur_estado VARCHAR(30) DEFAULT '';

    SELECT estado INTO cur_estado FROM agj_autos_apertura WHERE id = NEW.aa_id;

    -- No sobreescribir estados terminales
    IF cur_estado NOT IN ('Realizado', 'Abreviado', 'Cancelado') THEN
        SELECT COUNT(*) INTO cnt
        FROM agj_agendamientos
        WHERE aa_id = NEW.aa_id
          AND deleted_at IS NULL
          AND estado NOT IN ('Cancelado');

        IF cnt = 1 THEN
            UPDATE agj_autos_apertura SET estado = 'Agendado'      WHERE id = NEW.aa_id;
        ELSEIF cnt >= 2 THEN
            UPDATE agj_autos_apertura SET estado = 'Sobreagendado' WHERE id = NEW.aa_id;
        END IF;
    END IF;
END$$
DELIMITER ;

DROP TRIGGER IF EXISTS trg_ag_after_update;
DELIMITER $$
CREATE TRIGGER trg_ag_after_update
AFTER UPDATE ON agj_agendamientos
FOR EACH ROW
BEGIN
    DECLARE cnt INT DEFAULT 0;
    DECLARE cur_estado VARCHAR(30) DEFAULT '';

    SELECT estado INTO cur_estado FROM agj_autos_apertura WHERE id = NEW.aa_id;

    -- No sobreescribir estados terminales
    IF cur_estado NOT IN ('Realizado', 'Abreviado', 'Cancelado') THEN
        SELECT COUNT(*) INTO cnt
        FROM agj_agendamientos
        WHERE aa_id = NEW.aa_id
          AND deleted_at IS NULL
          AND estado NOT IN ('Cancelado');

        IF cnt = 0 THEN
            UPDATE agj_autos_apertura SET estado = 'Para Agendar'  WHERE id = NEW.aa_id;
        ELSEIF cnt = 1 THEN
            UPDATE agj_autos_apertura SET estado = 'Agendado'      WHERE id = NEW.aa_id;
        ELSE
            UPDATE agj_autos_apertura SET estado = 'Sobreagendado' WHERE id = NEW.aa_id;
        END IF;
    END IF;
END$$
DELIMITER ;

DROP TRIGGER IF EXISTS trg_ag_after_delete;
DELIMITER $$
CREATE TRIGGER trg_ag_after_delete
AFTER DELETE ON agj_agendamientos
FOR EACH ROW
BEGIN
    DECLARE cnt INT DEFAULT 0;
    DECLARE cur_estado VARCHAR(30) DEFAULT '';

    SELECT estado INTO cur_estado FROM agj_autos_apertura WHERE id = OLD.aa_id;

    IF cur_estado NOT IN ('Realizado', 'Abreviado', 'Cancelado') THEN
        SELECT COUNT(*) INTO cnt
        FROM agj_agendamientos
        WHERE aa_id = OLD.aa_id
          AND deleted_at IS NULL
          AND estado NOT IN ('Cancelado');

        IF cnt = 0 THEN
            UPDATE agj_autos_apertura SET estado = 'Para Agendar'  WHERE id = OLD.aa_id;
        ELSEIF cnt = 1 THEN
            UPDATE agj_autos_apertura SET estado = 'Agendado'      WHERE id = OLD.aa_id;
        ELSE
            UPDATE agj_autos_apertura SET estado = 'Sobreagendado' WHERE id = OLD.aa_id;
        END IF;
    END IF;
END$$
DELIMITER ;
