-- Schema inicial do banco de dados SaaS Clinico
-- Usar InnoDB para integridade referencial
-- Importar no phpMyAdmin: Execute este arquivo no banco 'rosanasi_sis' (ou crie o banco primeiro se necessário)

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    senha_hash VARCHAR(255) NOT NULL,
    perfil ENUM('ADMINISTRADOR', 'SUPERVISOR', 'COLABORADOR') NOT NULL,
    ativo TINYINT(1) DEFAULT 1,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE licenca (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dominio VARCHAR(255) NOT NULL UNIQUE,
    status ENUM('ATIVA', 'SUSPENSA', 'CANCELADA') DEFAULT 'ATIVA',
    ultima_validacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE termos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    texto TEXT NOT NULL,
    versao VARCHAR(50) NOT NULL,
    ativo TINYINT(1) DEFAULT 1,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE pacientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255) NOT NULL,
    data_nascimento DATE NOT NULL,
    tipo ENUM('adulto', 'infantil') NOT NULL,
    responsavel_principal_id INT NULL, -- FK removida para evitar dependencia circular; validar via app
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE responsaveis (
    id INT AUTO_INCREMENT PRIMARY KEY,
    paciente_id INT NOT NULL,
    nome VARCHAR(255) NOT NULL,
    relacao VARCHAR(100) NOT NULL, -- ex.: pai, mae, tutor
    contato VARCHAR(255),
    ativo TINYINT(1) DEFAULT 1,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE anamnese_infantil (
    id INT AUTO_INCREMENT PRIMARY KEY,
    paciente_id INT NOT NULL,
    dados_json JSON NOT NULL, -- estrutura completa em JSON
    status ENUM('EM_ANDAMENTO', 'FINALIZADA') DEFAULT 'EM_ANDAMENTO',
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    finalizado_em TIMESTAMP NULL,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE anamnese_adulta (
    id INT AUTO_INCREMENT PRIMARY KEY,
    paciente_id INT NOT NULL,
    dados_json JSON NOT NULL,
    status ENUM('EM_ANDAMENTO', 'FINALIZADA') DEFAULT 'EM_ANDAMENTO',
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    finalizado_em TIMESTAMP NULL,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE prontuario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    paciente_id INT NOT NULL,
    profissional_id INT NOT NULL, -- usuario que registrou
    data DATE NOT NULL,
    entrada TEXT NOT NULL, -- nunca sobrescrever, adicionar sempre
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE,
    FOREIGN KEY (profissional_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE termos_aceites (
    id INT AUTO_INCREMENT PRIMARY KEY,
    termo_id INT NOT NULL,
    usuario_id INT NULL, -- se aceite por usuario
    responsavel_id INT NULL, -- se aceite por responsavel
    assinado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (termo_id) REFERENCES termos(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (responsavel_id) REFERENCES responsaveis(id) ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE auditoria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NULL, -- quem executou
    solicitante_id INT NULL, -- quem solicitou (para autorizacoes)
    autorizador_id INT NULL, -- quem autorizou (ADMIN/SUPERVISOR)
    evento VARCHAR(255) NOT NULL, -- ex.: login, criacao_paciente
    detalhes_json JSON NOT NULL, -- dados adicionais
    ip VARCHAR(45) NOT NULL, -- IPv4/IPv6
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE SET NULL,
    FOREIGN KEY (solicitante_id) REFERENCES usuarios(id) ON DELETE SET NULL,
    FOREIGN KEY (autorizador_id) REFERENCES usuarios(id) ON DELETE SET NULL
) ENGINE=InnoDB;
