-- Migration v48: Gestão de Leitos e Internação Hospitalar
-- Módulos: leitos, internacao

-- ======================================================
-- ALAS / ENFERMARIAS
-- ======================================================
CREATE TABLE IF NOT EXISTS hospital_alas (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id  INT NOT NULL DEFAULT 1,
    nome        VARCHAR(100) NOT NULL,
    tipo        ENUM('enfermaria','uti','uti_neonatal','maternidade','pediatria','cirurgia','observacao','particular','psiquiatria') DEFAULT 'enfermaria',
    andar       VARCHAR(20) DEFAULT NULL,
    capacidade  INT DEFAULT 0,
    descricao   TEXT DEFAULT NULL,
    ativo       TINYINT(1) DEFAULT 1,
    created_at  DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at  DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_clinica (clinica_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ======================================================
-- LEITOS
-- ======================================================
CREATE TABLE IF NOT EXISTS hospital_leitos (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id  INT NOT NULL DEFAULT 1,
    ala_id      INT NOT NULL,
    numero      VARCHAR(20) NOT NULL,
    tipo        ENUM('standard','uti','isolamento','pediatrico','bariatrico','obstetricia') DEFAULT 'standard',
    status      ENUM('disponivel','ocupado','higienizacao','manutencao','bloqueado','reservado') DEFAULT 'disponivel',
    observacao  TEXT DEFAULT NULL,
    ativo       TINYINT(1) DEFAULT 1,
    created_at  DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at  DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (ala_id) REFERENCES hospital_alas(id) ON DELETE RESTRICT,
    INDEX idx_clinica (clinica_id),
    INDEX idx_ala (ala_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ======================================================
-- INTERNAÇÕES
-- ======================================================
CREATE TABLE IF NOT EXISTS hospital_internacoes (
    id                  INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id          INT NOT NULL DEFAULT 1,
    numero_internacao   VARCHAR(30) UNIQUE NOT NULL,
    paciente_id         INT NOT NULL,
    leito_id            INT NOT NULL,
    medico_id           INT NOT NULL,
    tipo_internacao     ENUM('eletiva','urgencia','emergencia','obstetricia','psiquiatrica') DEFAULT 'eletiva',
    motivo              TEXT DEFAULT NULL,
    diagnostico_entrada VARCHAR(255) DEFAULT NULL,
    cid10               VARCHAR(20) DEFAULT NULL,
    convenio_id         INT DEFAULT NULL,
    numero_guia         VARCHAR(50) DEFAULT NULL,
    data_entrada        DATETIME NOT NULL,
    data_previsao_alta  DATE DEFAULT NULL,
    data_alta           DATETIME DEFAULT NULL,
    motivo_alta         ENUM('alta_medica','transferencia_externa','obito','a_pedido','evasao') DEFAULT NULL,
    destino_alta        VARCHAR(255) DEFAULT NULL,
    status              ENUM('ativa','alta','obito') DEFAULT 'ativa',
    observacoes         TEXT DEFAULT NULL,
    usuario_id          INT NOT NULL,
    created_at          DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at          DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    deleted_at          DATETIME DEFAULT NULL,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE RESTRICT,
    FOREIGN KEY (leito_id)    REFERENCES hospital_leitos(id) ON DELETE RESTRICT,
    INDEX idx_clinica  (clinica_id),
    INDEX idx_status   (status),
    INDEX idx_paciente (paciente_id),
    INDEX idx_leito    (leito_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ======================================================
-- TRANSFERÊNCIAS DE LEITO
-- ======================================================
CREATE TABLE IF NOT EXISTS hospital_transferencias (
    id                  INT AUTO_INCREMENT PRIMARY KEY,
    internacao_id       INT NOT NULL,
    leito_origem_id     INT NOT NULL,
    leito_destino_id    INT NOT NULL,
    motivo              VARCHAR(255) DEFAULT NULL,
    data_transferencia  DATETIME DEFAULT CURRENT_TIMESTAMP,
    usuario_id          INT NOT NULL,
    FOREIGN KEY (internacao_id)    REFERENCES hospital_internacoes(id) ON DELETE RESTRICT,
    FOREIGN KEY (leito_origem_id)  REFERENCES hospital_leitos(id) ON DELETE RESTRICT,
    FOREIGN KEY (leito_destino_id) REFERENCES hospital_leitos(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ======================================================
-- PERMISSÕES (inserir nas migrações de perfil)
-- ======================================================
-- leitos_view    = Ver mapa de leitos
-- leitos_manage  = Gerenciar alas e leitos (CRUD + status)
-- internacao_view    = Ver internações
-- internacao_create  = Admitir paciente
-- internacao_alta    = Dar alta
-- internacao_transferir = Transferir leito
