CREATE TABLE IF NOT EXISTS ti_ativos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    codigo_ativo VARCHAR(32) NULL,
    tipo_ativo VARCHAR(30) NOT NULL,
    origem_tabela VARCHAR(80) NOT NULL,
    origem_id BIGINT UNSIGNED NOT NULL,
    patrimonio_normalizado VARCHAR(120) NULL,
    serie_normalizada VARCHAR(180) NULL,
    identificador_secundario VARCHAR(180) NULL,
    status_global VARCHAR(50) NULL,
    qualidade_cadastro TINYINT UNSIGNED NOT NULL DEFAULT 0,
    custo_aquisicao DECIMAL(13,2) NULL,
    garantia_ate DATE NULL,
    ultima_conferencia_em DATETIME NULL,
    ultima_conferencia_por VARCHAR(150) NULL,
    observacoes TEXT NULL,
    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_ativo_codigo (codigo_ativo),
    UNIQUE KEY uk_ti_ativo_origem (origem_tabela, origem_id),
    INDEX idx_ti_ativo_tipo (tipo_ativo),
    INDEX idx_ti_ativo_patrimonio (patrimonio_normalizado),
    INDEX idx_ti_ativo_serie (serie_normalizada),
    INDEX idx_ti_ativo_secundario (identificador_secundario),
    INDEX idx_ti_ativo_status (status_global),
    INDEX idx_ti_ativo_conferencia (ultima_conferencia_em)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ativo_conferencias (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ativo_id BIGINT UNSIGNED NOT NULL,
    resultado VARCHAR(40) NOT NULL,
    responsavel_confirmado VARCHAR(150) NULL,
    setor_encontrado VARCHAR(180) NULL,
    ambiente_encontrado VARCHAR(180) NULL,
    local_encontrado VARCHAR(220) NULL,
    condicao VARCHAR(40) NULL,
    observacoes TEXT NULL,
    conferido_por VARCHAR(150) NOT NULL,
    conferido_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_ti_conf_ativo (ativo_id, conferido_em),
    INDEX idx_ti_conf_resultado (resultado),
    CONSTRAINT fk_ti_conf_ativo FOREIGN KEY (ativo_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ativo_documentos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ativo_id BIGINT UNSIGNED NOT NULL,
    tipo_documento VARCHAR(60) NOT NULL,
    descricao VARCHAR(500) NULL,
    arquivo VARCHAR(500) NOT NULL,
    nome_original VARCHAR(255) NOT NULL,
    mime_type VARCHAR(100) NOT NULL,
    tamanho_bytes BIGINT UNSIGNED NOT NULL DEFAULT 0,
    hash_sha256 CHAR(64) NOT NULL,
    enviado_por VARCHAR(150) NOT NULL,
    enviado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_ti_doc_ativo (ativo_id, enviado_em),
    INDEX idx_ti_doc_tipo (tipo_documento),
    CONSTRAINT fk_ti_doc_ativo FOREIGN KEY (ativo_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ativo_custos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ativo_id BIGINT UNSIGNED NOT NULL,
    tipo_custo VARCHAR(50) NOT NULL,
    descricao VARCHAR(500) NOT NULL,
    valor DECIMAL(13,2) NOT NULL,
    fornecedor VARCHAR(180) NULL,
    documento_referencia VARCHAR(180) NULL,
    data_custo DATE NOT NULL,
    registrado_por VARCHAR(150) NOT NULL,
    registrado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_ti_custo_ativo (ativo_id, data_custo),
    INDEX idx_ti_custo_tipo (tipo_custo),
    CONSTRAINT fk_ti_custo_ativo FOREIGN KEY (ativo_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ativo_relacionamentos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ativo_origem_id BIGINT UNSIGNED NOT NULL,
    ativo_destino_id BIGINT UNSIGNED NOT NULL,
    tipo_relacao VARCHAR(50) NOT NULL,
    observacoes VARCHAR(500) NULL,
    inicio_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    fim_em DATETIME NULL,
    ativo TINYINT(1) NOT NULL DEFAULT 1,
    registrado_por VARCHAR(150) NOT NULL,
    INDEX idx_ti_rel_origem (ativo_origem_id, ativo),
    INDEX idx_ti_rel_destino (ativo_destino_id, ativo),
    INDEX idx_ti_rel_tipo (tipo_relacao, ativo),
    CONSTRAINT fk_ti_rel_origem FOREIGN KEY (ativo_origem_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE,
    CONSTRAINT fk_ti_rel_destino FOREIGN KEY (ativo_destino_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS ti_ativo_eventos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ativo_id BIGINT UNSIGNED NULL,
    tipo_evento VARCHAR(60) NOT NULL,
    titulo VARCHAR(180) NOT NULL,
    detalhes TEXT NULL,
    origem_modulo VARCHAR(80) NOT NULL DEFAULT 'CENTRAL_ATIVOS',
    usuario VARCHAR(150) NOT NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_ti_evento_ativo (ativo_id, criado_em),
    INDEX idx_ti_evento_tipo (tipo_evento),
    CONSTRAINT fk_ti_evento_ativo FOREIGN KEY (ativo_id)
        REFERENCES ti_ativos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
