-- Módulo AUTOPEÇAS - Peças Automotivas
-- Gestão de peças, compatibilidade e ordem de serviço para veículos automotivos

-- Tabela de peças automotivas
CREATE TABLE IF NOT EXISTS autopecas_pecas (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    product_id INT UNSIGNED NULL COMMENT 'ID do produto no módulo Produtos',
    codigo VARCHAR(100) NOT NULL COMMENT 'Código da peça',
    descricao VARCHAR(255) NOT NULL COMMENT 'Descrição da peça',
    marca VARCHAR(100) NULL COMMENT 'Marca da peça (ex: Bosch, Delphi, Genérico)',
    fabricante VARCHAR(100) NULL COMMENT 'Fabricante original (ex: GM, Ford, VW)',
    categoria VARCHAR(100) NULL COMMENT 'Categoria (ex: Motor, Transmissão, Elétrica, Suspensão)',
    ncm VARCHAR(8) NULL COMMENT 'NCM específico para peças automotivas',
    cest VARCHAR(7) NULL COMMENT 'CEST específico',
    preco_custo DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    preco_venda DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    estoque DECIMAL(12,3) NOT NULL DEFAULT 0,
    estoque_minimo DECIMAL(12,3) NOT NULL DEFAULT 0,
    unidade VARCHAR(10) NOT NULL DEFAULT 'UN',
    observacoes TEXT NULL,
    ativo BOOLEAN NOT NULL DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_product_id (product_id),
    INDEX idx_codigo (codigo),
    INDEX idx_marca (marca),
    INDEX idx_fabricante (fabricante),
    INDEX idx_categoria (categoria),
    INDEX idx_ncm (ncm),
    INDEX idx_ativo (ativo),
    UNIQUE KEY uk_codigo (codigo),
    FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Peças automotivas';

-- Tabela de compatibilidade de peças (quais modelos/anos/marcas usam a peça)
CREATE TABLE IF NOT EXISTS autopecas_compatibilidade (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    peca_id INT UNSIGNED NOT NULL,
    marca_veiculo VARCHAR(100) NOT NULL COMMENT 'Marca do veículo (ex: GM, Ford, VW)',
    modelo_veiculo VARCHAR(100) NOT NULL COMMENT 'Modelo do veículo (ex: Onix, Fiesta, Gol)',
    versao VARCHAR(100) NULL COMMENT 'Versão do veículo (ex: 1.0, 1.4, 1.6)',
    ano_inicio INT UNSIGNED NULL COMMENT 'Ano inicial de compatibilidade',
    ano_fim INT UNSIGNED NULL COMMENT 'Ano final de compatibilidade',
    motor VARCHAR(100) NULL COMMENT 'Motor (ex: 1.0, 1.4, 1.6, Diesel)',
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_peca_id (peca_id),
    INDEX idx_marca_modelo (marca_veiculo, modelo_veiculo),
    INDEX idx_anos (ano_inicio, ano_fim),
    FOREIGN KEY (peca_id) REFERENCES autopecas_pecas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Compatibilidade de peças com modelos de veículos';

-- Tabela de ordem de serviço para veículos
CREATE TABLE IF NOT EXISTS autopecas_ordem_servico (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    numero VARCHAR(50) NOT NULL COMMENT 'Número da OS',
    cliente_id INT UNSIGNED NOT NULL COMMENT 'ID do cliente',
    veiculo_marca VARCHAR(100) NULL COMMENT 'Marca do veículo',
    veiculo_modelo VARCHAR(100) NULL COMMENT 'Modelo do veículo',
    veiculo_ano INT UNSIGNED NULL COMMENT 'Ano do veículo',
    veiculo_placa VARCHAR(10) NULL COMMENT 'Placa do veículo',
    veiculo_km DECIMAL(10,0) NULL COMMENT 'Quilometragem',
    veiculo_chassi VARCHAR(50) NULL COMMENT 'Chassi',
    problema_relatado TEXT NULL COMMENT 'Problema relatado pelo cliente',
    diagnostico TEXT NULL COMMENT 'Diagnóstico técnico',
    status ENUM('aberta', 'em_andamento', 'aguardando_peca', 'finalizada', 'cancelada') NOT NULL DEFAULT 'aberta',
    valor_mao_obra DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    valor_pecas DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    valor_total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    tecnico_id INT UNSIGNED NULL COMMENT 'ID do técnico responsável',
    data_abertura DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    data_inicio DATETIME NULL,
    data_finalizacao DATETIME NULL,
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_numero (numero),
    INDEX idx_cliente_id (cliente_id),
    INDEX idx_status (status),
    INDEX idx_tecnico_id (tecnico_id),
    INDEX idx_data_abertura (data_abertura),
    UNIQUE KEY uk_numero (numero),
    FOREIGN KEY (cliente_id) REFERENCES clients(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Ordem de serviço para veículos';

-- Itens da ordem de serviço (peças e serviços)
CREATE TABLE IF NOT EXISTS autopecas_os_itens (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    os_id INT UNSIGNED NOT NULL,
    tipo ENUM('peca', 'servico', 'mao_obra') NOT NULL COMMENT 'Tipo de item',
    peca_id INT UNSIGNED NULL COMMENT 'ID da peça (se tipo = peca)',
    descricao VARCHAR(255) NOT NULL COMMENT 'Descrição do item',
    quantidade DECIMAL(12,3) NOT NULL DEFAULT 1.00,
    valor_unitario DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    valor_total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    desconto_percent DECIMAL(5,2) NOT NULL DEFAULT 0.00,
    desconto_valor DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    observacoes TEXT NULL,
    ordem INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Ordem de exibição',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_os_id (os_id),
    INDEX idx_peca_id (peca_id),
    INDEX idx_tipo (tipo),
    FOREIGN KEY (os_id) REFERENCES autopecas_ordem_servico(id) ON DELETE CASCADE,
    FOREIGN KEY (peca_id) REFERENCES autopecas_pecas(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Itens da ordem de serviço';

-- Histórico de serviços do veículo
CREATE TABLE IF NOT EXISTS autopecas_historico_servicos (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    cliente_id INT UNSIGNED NOT NULL,
    os_id INT UNSIGNED NULL COMMENT 'ID da OS relacionada',
    veiculo_marca VARCHAR(100) NULL,
    veiculo_modelo VARCHAR(100) NULL,
    veiculo_placa VARCHAR(10) NULL,
    servico_realizado TEXT NOT NULL,
    valor_total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    data_servico DATETIME NOT NULL,
    km_servico DECIMAL(10,0) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_cliente_id (cliente_id),
    INDEX idx_os_id (os_id),
    INDEX idx_data_servico (data_servico),
    INDEX idx_placa (veiculo_placa),
    FOREIGN KEY (cliente_id) REFERENCES clients(id) ON DELETE RESTRICT,
    FOREIGN KEY (os_id) REFERENCES autopecas_ordem_servico(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Histórico de serviços realizados';

-- Permissões
INSERT IGNORE INTO permissions (name) VALUES
('autopecas.read'),
('autopecas.create'),
('autopecas.update'),
('autopecas.delete'),
('autopecas.os.read'),
('autopecas.os.create'),
('autopecas.os.update'),
('autopecas.os.delete');

