-- ============================================
-- TrackGear - Script de Instalação
-- Versão: 2.0.0
-- Data: 2026-03-19
-- Compatível com MySQL 5.7+
-- ============================================

-- ============================================
-- PARTE 1: TABELAS DO TRACKGEAR
-- ============================================

-- Tabela de Status do Equipamento
CREATE TABLE IF NOT EXISTS trackgear_status_equipamento (
    codigo INT(11) NOT NULL AUTO_INCREMENT,
    descricao VARCHAR(100) NOT NULL,
    cor VARCHAR(7) DEFAULT '#000000',
    icone VARCHAR(50) DEFAULT NULL COMMENT 'Nome do ícone (ex: truck, wrench, check)',
    ordem INT(11) DEFAULT 0 COMMENT '0=livre (sem restrição), >0=sequencial (só avança)',
    ativo CHAR(1) DEFAULT 'S',
    atualiza_equipamento CHAR(1) DEFAULT NULL COMMENT 'Valor a setar no campo ativo da tabela equipamento (L=Livre, O=Ocupado, M=Manutenção, I=Inativo, NULL=não altera)',
    PRIMARY KEY (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela de Movimentação do Equipamento
CREATE TABLE IF NOT EXISTS trackgear_movimentacao (
    codigo INT(11) NOT NULL AUTO_INCREMENT,
    equipamento INT(11) NOT NULL,
    usuario INT(11) NOT NULL,
    empresa INT(11) NOT NULL,
    pedido INT(11) DEFAULT NULL,
    lead_codigo INT(11) DEFAULT NULL,
    ordem_servico INT(11) DEFAULT NULL,
    orcamento INT(11) DEFAULT NULL,
    item_orcamento INT(11) DEFAULT NULL,
    status INT(11) NOT NULL,
    latitude FLOAT(15,8) DEFAULT NULL,
    longitude FLOAT(15,8) DEFAULT NULL,
    foto_url VARCHAR(500) DEFAULT NULL,
    foto_tipo CHAR(1) DEFAULT NULL COMMENT 'E=Entrega, R=Retirada, M=Manutenção, H=Higienização',
    observacao VARCHAR(500) DEFAULT NULL,
    data DATE NOT NULL,
    hora TIME NOT NULL,
    data_registro DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (codigo),
    KEY idx_mov_equipamento (equipamento),
    KEY idx_mov_usuario (usuario),
    KEY idx_mov_empresa (empresa),
    KEY idx_mov_pedido (pedido),
    KEY idx_mov_lead (lead_codigo),
    KEY idx_mov_orcamento (orcamento),
    KEY idx_mov_data (data),
    KEY idx_mov_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela de Vínculo Item do Orçamento ↔ Equipamento
CREATE TABLE IF NOT EXISTS item_equipamento (
    codigo INT(11) NOT NULL AUTO_INCREMENT,
    orcamento INT(11) NOT NULL,
    item INT(11) NOT NULL,
    equipamento INT(11) NOT NULL,
    data_inicio DATE DEFAULT NULL,
    data_previsao DATE DEFAULT NULL,
    data_entregado DATE DEFAULT NULL,
    usuario INT(11) DEFAULT NULL,
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (codigo),
    UNIQUE KEY idx_ie_equipamento (equipamento),
    KEY idx_ie_orcamento (orcamento),
    KEY idx_ie_item (orcamento, item)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela de Notificações
CREATE TABLE IF NOT EXISTS trackgear_notificacoes (
    codigo INT(11) NOT NULL AUTO_INCREMENT,
    usuario INT(11) NOT NULL,
    empresa INT(11) NOT NULL,
    titulo VARCHAR(200) NOT NULL,
    mensagem VARCHAR(500) NOT NULL,
    tipo VARCHAR(50) DEFAULT NULL COMMENT 'movimentacao, programacao, alerta, sistema',
    referencia_id INT(11) DEFAULT NULL,
    lida CHAR(1) DEFAULT 'N',
    data_criacao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    data_leitura DATETIME DEFAULT NULL,
    PRIMARY KEY (codigo),
    KEY idx_notif_usuario (usuario),
    KEY idx_notif_empresa (empresa),
    KEY idx_notif_lida (lida)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabela de Configuração por empresa
CREATE TABLE IF NOT EXISTS trackgear_config (
    codigo INT(11) NOT NULL AUTO_INCREMENT,
    empresa INT(11) NOT NULL,
    foto_obrigatoria_entrega CHAR(1) DEFAULT 'S',
    foto_obrigatoria_retirada CHAR(1) DEFAULT 'S',
    gps_obrigatorio CHAR(1) DEFAULT 'S',
    notificar_movimentacao CHAR(1) DEFAULT 'S',
    PRIMARY KEY (codigo),
    UNIQUE KEY idx_config_empresa (empresa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================
-- PARTE 2: DADOS INICIAIS - STATUS
-- ============================================
-- ordem > 0 = sequencial (só avança)
-- ordem = 0 = livre (pode ser aplicado a qualquer momento)
-- atualiza_equipamento = valor a setar no campo ativo da tabela equipamento

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Retirado do Estoque', '#3498db', 'arrow-up-from-bracket', 1, 'O'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Retirado do Estoque');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Entregue ao Cliente', '#27ae60', 'circle-check', 2, 'O'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Entregue ao Cliente');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Instalado', '#2ecc71', 'plug', 3, 'O'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Instalado');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Coletado para Devolução', '#9b59b6', 'rotate-left', 4, 'O'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao LIKE 'Coletado%');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Disponível no Estoque', '#2c3e50', 'warehouse', 5, 'L'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao LIKE 'Dispon%');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Reparo', '#e67e22', 'screwdriver-wrench', 0, 'M'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Reparo');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Manutenção', '#e74c3c', 'wrench', 0, 'M'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Manutenção');

INSERT INTO trackgear_status_equipamento (descricao, cor, icone, ordem, atualiza_equipamento)
SELECT 'Higienização', '#1abc9c', 'broom', 0, NULL
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM trackgear_status_equipamento WHERE descricao = 'Higienização');

-- ============================================
-- NOTAS
-- ============================================
-- equipamento.ativo: L=Livre, O=Ocupado, M=Manutenção, I=Inativo
-- Fluxo: orçamento → pedido (datas), orçamento → item_equipamento → equipamento
-- Fluxo legado: pedido.equipamento (direto, sem item_equipamento)
-- API S3: https://api.unionsystem.com.br/s3/envio.php (JSON, Content-Type: application/json)
