-- ============================================================
-- Migration 002: agj_user_prefs + triggers de estado en AA
-- Ejecutar en phpMyAdmin (SQL) o consola mysql
-- ============================================================

-- ── 1. Tabla de preferencias por usuario ─────────────────────
CREATE TABLE IF NOT EXISTS agj_user_prefs (
    usuario    VARCHAR(100) NOT NULL,
    pref_key   VARCHAR(50)  NOT NULL,
    pref_value TEXT,
    updated_at TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (usuario, pref_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 2. Triggers: estado automático en agj_autos_apertura ─────
--   AFTER INSERT  → 1 activo = Agendado  /  ≥2 = Sobreagendado
--   AFTER UPDATE  → 0 activos = Para Agendar / 1 = Agendado / ≥2 = Sobreagendado
--   AFTER DELETE  → igual que UPDATE pero sobre OLD.aa_id

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;
    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$$
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;
    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$$
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;
    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$$
DELIMITER ;

-- ── 3. Agregar 'Sobreagendado' al ENUM de estado si no existe ─
-- (Solo ejecutar si la columna usa ENUM; omitir si es VARCHAR)
-- ALTER TABLE agj_autos_apertura
--     MODIFY COLUMN estado ENUM('En espera','Para Agendar','Programado','Agendado',
--                                'Sobreagendado','Realizado','Abreviado','Cancelado')
--     NOT NULL DEFAULT 'Para Agendar';
