-- Migration v83: Fila de Atendimento Ambulatorial + Totem
-- Fluxo: Totem (senha) → Recepção → Triagem (Enfermagem) → Médico

CREATE TABLE IF NOT EXISTS `fila_atendimento` (
    `id`                        INT AUTO_INCREMENT PRIMARY KEY,
    `clinica_id`                INT NOT NULL DEFAULT 1,

    -- Senha gerada pelo totem
    `numero_senha`              VARCHAR(10) NOT NULL COMMENT 'Ex: N001, P001, U001',
    `tipo_senha`                ENUM('normal','prioritario','urgente') NOT NULL DEFAULT 'normal',
    `prefixo_senha`             CHAR(1) GENERATED ALWAYS AS (
                                    CASE tipo_senha
                                        WHEN 'normal'      THEN 'N'
                                        WHEN 'prioritario' THEN 'P'
                                        WHEN 'urgente'     THEN 'U'
                                    END
                                ) STORED,

    -- Paciente (opcional — nome digitado no totem ou vinculado depois)
    `paciente_id`               INT DEFAULT NULL,
    `paciente_nome`             VARCHAR(150) DEFAULT NULL COMMENT 'Nome digitado no totem',

    -- Destino (escolhido no totem)
    `especialidade_id`          INT DEFAULT NULL,

    -- Atribuição feita pela enfermagem
    `profissional_id`           INT DEFAULT NULL,
    `agendamento_id`            INT DEFAULT NULL,
    `triagem_id`                INT DEFAULT NULL COMMENT 'FK triagem_manchester',

    -- Status da jornada
    `status`                    ENUM(
                                    'aguardando_recepcao',
                                    'aguardando_triagem',
                                    'em_triagem',
                                    'aguardando_medico',
                                    'em_atendimento',
                                    'atendido',
                                    'desistiu',
                                    'cancelado'
                                ) NOT NULL DEFAULT 'aguardando_triagem',

    -- Timestamps de cada etapa
    `chamado_recepcao_em`       DATETIME DEFAULT NULL,
    `triagem_iniciada_em`       DATETIME DEFAULT NULL,
    `triagem_finalizada_em`     DATETIME DEFAULT NULL,
    `chamado_medico_em`         DATETIME DEFAULT NULL,
    `atendimento_iniciado_em`   DATETIME DEFAULT NULL,
    `atendimento_finalizado_em` DATETIME DEFAULT NULL,

    -- Quem atendeu cada etapa
    `usuario_recepcao_id`       INT DEFAULT NULL,
    `usuario_triagem_id`        INT DEFAULT NULL,
    `usuario_medico_id`         INT DEFAULT NULL,

    -- Classificação de risco (preenchida na triagem)
    `classificacao_risco`       ENUM('vermelho','laranja','amarelo','verde','azul') DEFAULT NULL,
    `observacao`                TEXT DEFAULT NULL,

    -- Soft delete + auditoria
    `deleted_at`                DATETIME DEFAULT NULL,
    `created_at`                DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`                DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    INDEX `idx_fila_clinica_status` (`clinica_id`, `status`),
    INDEX `idx_fila_data`           (`created_at`),
    INDEX `idx_fila_profissional`   (`profissional_id`),
    INDEX `idx_fila_paciente`       (`paciente_id`),
    INDEX `idx_fila_deleted`        (`deleted_at`),

    FOREIGN KEY (`paciente_id`)      REFERENCES `pacientes`(`id`)              ON DELETE SET NULL,
    FOREIGN KEY (`especialidade_id`) REFERENCES `master_especialidades`(`id`)  ON DELETE SET NULL,
    FOREIGN KEY (`profissional_id`)  REFERENCES `master_profissionais`(`id`)   ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Contador diário de senhas por clínica e tipo (evita gaps em concorrência)
CREATE TABLE IF NOT EXISTS `fila_contadores` (
    `id`          INT AUTO_INCREMENT PRIMARY KEY,
    `clinica_id`  INT NOT NULL,
    `data`        DATE NOT NULL,
    `tipo_senha`  ENUM('normal','prioritario','urgente') NOT NULL,
    `ultimo`      INT NOT NULL DEFAULT 0,
    UNIQUE KEY `uk_contador` (`clinica_id`, `data`, `tipo_senha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- PERMISSÕES
-- ============================================================
INSERT IGNORE INTO `permissoes` (`nome`, `chave`, `descricao`) VALUES
('Fila — Recepção',    'fila_recepcao',   'Acessar painel de recepção da fila de atendimento'),
('Fila — Enfermagem',  'fila_enfermagem', 'Acessar fila de triagem da enfermagem'),
('Fila — Médico',      'fila_medico',     'Acessar fila de pacientes do médico'),
('Fila — Gerenciar',   'fila_gerenciar',  'Cancelar senhas e gerenciar fila');

-- Admin (1) e Recepcionista (3) → recepcao + gerenciar
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 1, id FROM `permissoes` WHERE `chave` IN ('fila_recepcao','fila_enfermagem','fila_medico','fila_gerenciar');

INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 3, id FROM `permissoes` WHERE `chave` IN ('fila_recepcao','fila_gerenciar');

-- Médico (2) → fila_medico
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 2, id FROM `permissoes` WHERE `chave` = 'fila_medico';

-- Enfermeiro (4) → fila_enfermagem
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT 4, id FROM `permissoes` WHERE `chave` = 'fila_enfermagem';
