-- Módulo MOTOPEÇAS - Peças de Motocicletas
-- Gestão de peças, compatibilidade e ordem de serviço

-- Tabela de peças de motocicletas
CREATE TABLE IF NOT EXISTS motopecas_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: Honda, Yamaha, Genérico)',
    categoria VARCHAR(100) NULL COMMENT 'Categoria (ex: Motor, Transmissão, Elétrica)',
    ncm VARCHAR(8) NULL COMMENT 'NCM específico para peças de motocicletas',
    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_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 de motocicletas';

-- Tabela de compatibilidade de peças (quais modelos/anos usam a peça)
CREATE TABLE IF NOT EXISTS motopecas_compatibilidade (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    peca_id INT UNSIGNED NOT NULL,
    marca_moto VARCHAR(100) NOT NULL COMMENT 'Marca da motocicleta (ex: Honda, Yamaha)',
    modelo_moto VARCHAR(100) NOT NULL COMMENT 'Modelo da motocicleta (ex: CG 160, Fazer 250)',
    ano_inicio INT UNSIGNED NULL COMMENT 'Ano inicial de compatibilidade',
    ano_fim INT UNSIGNED NULL COMMENT 'Ano final de compatibilidade',
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_peca_id (peca_id),
    INDEX idx_marca_modelo (marca_moto, modelo_moto),
    INDEX idx_anos (ano_inicio, ano_fim),
    FOREIGN KEY (peca_id) REFERENCES motopecas_pecas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Compatibilidade de peças com modelos de motocicletas';

-- Tabela de ordem de serviço para motocicletas
CREATE TABLE IF NOT EXISTS motopecas_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',
    moto_marca VARCHAR(100) NULL COMMENT 'Marca da motocicleta',
    moto_modelo VARCHAR(100) NULL COMMENT 'Modelo da motocicleta',
    moto_ano INT UNSIGNED NULL COMMENT 'Ano da motocicleta',
    moto_placa VARCHAR(10) NULL COMMENT 'Placa da motocicleta',
    moto_km DECIMAL(10,0) NULL COMMENT 'Quilometragem',
    moto_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 motocicletas';

-- Itens da ordem de serviço (peças e serviços)
CREATE TABLE IF NOT EXISTS motopecas_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 motopecas_ordem_servico(id) ON DELETE CASCADE,
    FOREIGN KEY (peca_id) REFERENCES motopecas_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 da motocicleta
CREATE TABLE IF NOT EXISTS motopecas_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',
    moto_marca VARCHAR(100) NULL,
    moto_modelo VARCHAR(100) NULL,
    moto_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 (moto_placa),
    FOREIGN KEY (cliente_id) REFERENCES clients(id) ON DELETE RESTRICT,
    FOREIGN KEY (os_id) REFERENCES motopecas_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
('motopecas.read'),
('motopecas.create'),
('motopecas.update'),
('motopecas.delete'),
('motopecas.os.read'),
('motopecas.os.create'),
('motopecas.os.update'),
('motopecas.os.delete');

