-- CONTROLE RIGOROSO DE COMPUTADORES E NOTEBOOKS
-- Execute no banco manutencao_ti ou use instalar_computadores.php.

CREATE TABLE IF NOT EXISTS ti_setores (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(150) NOT NULL,
    secretaria VARCHAR(150) NULL,
    predio VARCHAR(150) NULL,
    andar VARCHAR(80) NULL,
    codigo VARCHAR(50) NULL,
    ativo TINYINT(1) NOT NULL DEFAULT 1,
    criado_por VARCHAR(150) NOT NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_ti_setor_nome_predio (nome, predio),
    INDEX idx_ti_setor_ativo (ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ambientes (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    setor_id INT UNSIGNED NOT NULL,
    nome VARCHAR(150) NOT NULL,
    codigo VARCHAR(50) NULL,
    tipo VARCHAR(50) NOT NULL DEFAULT 'SALA',
    grid_coluna TINYINT UNSIGNED NOT NULL DEFAULT 1,
    grid_linha TINYINT UNSIGNED NOT NULL DEFAULT 1,
    grid_largura TINYINT UNSIGNED NOT NULL DEFAULT 3,
    grid_altura TINYINT UNSIGNED NOT NULL DEFAULT 1,
    ordem INT NOT NULL DEFAULT 0,
    cor VARCHAR(20) NULL,
    observacoes VARCHAR(500) NULL,
    ativo TINYINT(1) NOT NULL DEFAULT 1,
    criado_por VARCHAR(150) NOT NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_ti_ambiente_setor_nome (setor_id, nome),
    INDEX idx_ti_ambiente_setor (setor_id, ativo),
    CONSTRAINT fk_ti_ambiente_setor FOREIGN KEY (setor_id) REFERENCES ti_setores(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_computadores (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    codigo_interno VARCHAR(40) NOT NULL,
    tipo VARCHAR(30) NOT NULL DEFAULT 'DESKTOP',
    patrimonio VARCHAR(50) NULL,
    numero_serie VARCHAR(100) NULL,
    nome_maquina VARCHAR(100) NULL,
    fabricante VARCHAR(100) NOT NULL DEFAULT 'Não identificado',
    modelo VARCHAR(150) NOT NULL DEFAULT 'Não identificado',
    processador VARCHAR(180) NULL,
    memoria_ram_gb DECIMAL(8,2) NULL,
    armazenamento_tipo VARCHAR(30) NULL,
    armazenamento_gb INT UNSIGNED NULL,
    sistema_operacional VARCHAR(120) NULL,
    arquitetura VARCHAR(20) NULL,
    mac_rede VARCHAR(30) NULL,
    mac_wifi VARCHAR(30) NULL,
    ip_fixo VARCHAR(45) NULL,
    dominio VARCHAR(120) NULL,
    data_aquisicao DATE NULL,
    garantia_ate DATE NULL,
    condicao VARCHAR(30) NOT NULL DEFAULT 'NAO_AVALIADO',
    status VARCHAR(30) NOT NULL DEFAULT 'CADASTRO_INICIAL',
    responsavel_nome VARCHAR(150) NULL,
    responsavel_matricula VARCHAR(50) NULL,
    responsavel_cargo VARCHAR(120) NULL,
    setor_id INT UNSIGNED NULL,
    ambiente_id INT UNSIGNED NULL,
    localizacao_texto VARCHAR(180) NULL,
    acessorios TEXT NULL,
    observacoes TEXT NULL,
    data_entrega DATETIME NULL,
    data_devolucao DATETIME NULL,
    tecnico_ultima_entrega VARCHAR(150) NULL,
    criado_por VARCHAR(150) NOT NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_por VARCHAR(150) NOT NULL,
    atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_ti_computador_codigo (codigo_interno),
    UNIQUE KEY uk_ti_computador_patrimonio (patrimonio),
    UNIQUE KEY uk_ti_computador_serie (numero_serie),
    UNIQUE KEY uk_ti_computador_nome_maquina (nome_maquina),
    INDEX idx_ti_computador_status (status),
    INDEX idx_ti_computador_tipo (tipo),
    INDEX idx_ti_computador_responsavel (responsavel_nome),
    INDEX idx_ti_computador_setor (setor_id),
    INDEX idx_ti_computador_ambiente (ambiente_id),
    INDEX idx_ti_computador_fabricante_modelo (fabricante, modelo),
    CONSTRAINT fk_ti_computador_setor FOREIGN KEY (setor_id) REFERENCES ti_setores(id) ON DELETE SET NULL,
    CONSTRAINT fk_ti_computador_ambiente FOREIGN KEY (ambiente_id) REFERENCES ti_ambientes(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_computador_movimentacoes (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    computador_id INT UNSIGNED NOT NULL,
    acao VARCHAR(50) NOT NULL,
    status_anterior VARCHAR(30) NULL,
    status_novo VARCHAR(30) NULL,
    responsavel_anterior VARCHAR(150) NULL,
    responsavel_novo VARCHAR(150) NULL,
    setor_anterior VARCHAR(150) NULL,
    setor_novo VARCHAR(150) NULL,
    ambiente_anterior VARCHAR(150) NULL,
    ambiente_novo VARCHAR(150) NULL,
    motivo VARCHAR(500) NULL,
    usuario VARCHAR(150) NOT NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_ti_mov_computador (computador_id, criado_em),
    INDEX idx_ti_mov_usuario (usuario),
    CONSTRAINT fk_ti_mov_computador FOREIGN KEY (computador_id) REFERENCES ti_computadores(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_computador_termos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    computador_id INT UNSIGNED NOT NULL,
    movimentacao_id BIGINT UNSIGNED NULL,
    numero_termo VARCHAR(50) NOT NULL,
    tipo VARCHAR(30) NOT NULL DEFAULT 'RESPONSABILIDADE',
    responsavel_nome VARCHAR(150) NOT NULL,
    responsavel_matricula VARCHAR(50) NULL,
    responsavel_cargo VARCHAR(120) NULL,
    setor_nome VARCHAR(150) NOT NULL,
    ambiente_nome VARCHAR(150) NULL,
    localizacao_texto VARCHAR(180) NULL,
    tecnico_nome VARCHAR(150) NOT NULL,
    equipamento_json LONGTEXT NOT NULL,
    acessorios TEXT NULL,
    condicao_entrega VARCHAR(30) NULL,
    declaracao TEXT NULL,
    token CHAR(64) NOT NULL,
    status VARCHAR(30) NOT NULL DEFAULT 'GERADO',
    arquivo_assinado VARCHAR(500) NULL,
    nome_original VARCHAR(255) NULL,
    mime_type VARCHAR(100) NULL,
    tamanho_bytes BIGINT UNSIGNED NULL,
    hash_sha256 CHAR(64) NULL,
    enviado_por VARCHAR(150) NULL,
    enviado_em DATETIME NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_ti_termo_numero (numero_termo),
    UNIQUE KEY uk_ti_termo_token (token),
    INDEX idx_ti_termo_computador (computador_id, criado_em),
    INDEX idx_ti_termo_status (status),
    CONSTRAINT fk_ti_termo_computador FOREIGN KEY (computador_id) REFERENCES ti_computadores(id) ON DELETE CASCADE,
    CONSTRAINT fk_ti_termo_movimentacao FOREIGN KEY (movimentacao_id) REFERENCES ti_computador_movimentacoes(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
