-- Migration V29: Módulo Agenda Médica
-- Data: 2026-02-24
-- Cria consultórios, agenda semanal recorrente e exceções pontuais

-- 1. Consultórios cadastráveis
CREATE TABLE IF NOT EXISTS `master_consultorios` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `nome` VARCHAR(100) NOT NULL,
    `descricao` VARCHAR(255) DEFAULT NULL,
    `ativo` TINYINT(1) NOT NULL DEFAULT 1,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_ativo` (`ativo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Disponibilidade semanal recorrente do profissional
CREATE TABLE IF NOT EXISTS `master_agenda_semanal` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `profissional_id` INT NOT NULL,
    `consultorio_id` INT NOT NULL,
    `dia_semana` TINYINT NOT NULL COMMENT '0=Dom 1=Seg 2=Ter 3=Qua 4=Qui 5=Sex 6=Sab',
    `hora_inicio` TIME NOT NULL,
    `hora_fim` TIME NOT NULL,
    `ativo` TINYINT(1) NOT NULL DEFAULT 1,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_profissional` (`profissional_id`),
    INDEX `idx_consultorio` (`consultorio_id`),
    INDEX `idx_dia` (`dia_semana`),
    CONSTRAINT `fk_agenda_sem_prof` FOREIGN KEY (`profissional_id`)
        REFERENCES `master_profissionais`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_agenda_sem_cons` FOREIGN KEY (`consultorio_id`)
        REFERENCES `master_consultorios`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. Exceções: datas extras ou bloqueios pontuais
CREATE TABLE IF NOT EXISTS `master_agenda_excecoes` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `profissional_id` INT NOT NULL,
    `consultorio_id` INT DEFAULT NULL,
    `data_especifica` DATE NOT NULL,
    `hora_inicio` TIME DEFAULT NULL COMMENT 'NULL = dia inteiro',
    `hora_fim` TIME DEFAULT NULL,
    `tipo` ENUM('adicionar','bloquear') NOT NULL DEFAULT 'bloquear',
    `motivo` VARCHAR(255) DEFAULT NULL,
    `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_excecao_prof` (`profissional_id`),
    INDEX `idx_excecao_data` (`data_especifica`),
    CONSTRAINT `fk_agenda_exc_prof` FOREIGN KEY (`profissional_id`)
        REFERENCES `master_profissionais`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_agenda_exc_cons` FOREIGN KEY (`consultorio_id`)
        REFERENCES `master_consultorios`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. Consultórios padrão iniciais
INSERT IGNORE INTO `master_consultorios` (`nome`, `descricao`) VALUES
('Consultório 1', 'Primeiro consultório'),
('Consultório 2', 'Segundo consultório');

-- 5. Permissões
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Agenda Médica', 'master_agenda_medica', 'Gerenciar agenda pessoal de atendimento por consultório'),
('Consultórios', 'master_consultorios', 'Cadastrar e gerenciar consultórios da clínica');

-- 6. Associa ao perfil Admin (ID 1)
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 1, id FROM `permissoes`
WHERE `chave` IN ('master_agenda_medica', 'master_consultorios');
