-- Módulo LOCADORA - Locadora de Veículos
-- Gestão de frota, contratos, quilometragem, multas e manutenção

-- Tabela de frota de veículos
CREATE TABLE IF NOT EXISTS locadora_frota (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    placa VARCHAR(10) NOT NULL COMMENT 'Placa do veículo',
    marca VARCHAR(100) NOT NULL COMMENT 'Marca do veículo',
    modelo VARCHAR(100) NOT NULL COMMENT 'Modelo do veículo',
    ano_fabricacao INT UNSIGNED NULL COMMENT 'Ano de fabricação',
    ano_modelo INT UNSIGNED NULL COMMENT 'Ano do modelo',
    cor VARCHAR(50) NULL COMMENT 'Cor do veículo',
    chassi VARCHAR(50) NULL COMMENT 'Chassi',
    renavam VARCHAR(20) NULL COMMENT 'RENAVAM',
    km_atual DECIMAL(10,0) NOT NULL DEFAULT 0 COMMENT 'Quilometragem atual',
    km_ultima_manutencao DECIMAL(10,0) NULL COMMENT 'KM da última manutenção',
    km_proxima_manutencao DECIMAL(10,0) NULL COMMENT 'KM da próxima manutenção',
    status ENUM('disponivel', 'locado', 'manutencao', 'inativo', 'vendido') NOT NULL DEFAULT 'disponivel',
    categoria ENUM('economico', 'intermediario', 'executivo', 'suv', 'pickup', 'luxo') NULL,
    combustivel ENUM('gasolina', 'alcool', 'flex', 'diesel', 'eletrico', 'hibrido') NULL,
    valor_diaria DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor da diária',
    valor_seguro DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor do seguro',
    ncm VARCHAR(8) NULL COMMENT 'NCM específico para serviços de locação',
    cest VARCHAR(7) NULL COMMENT 'CEST específico',
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_placa (placa),
    INDEX idx_status (status),
    INDEX idx_categoria (categoria),
    INDEX idx_marca_modelo (marca, modelo),
    UNIQUE KEY uk_placa (placa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Frota de veículos para locação';

-- Tabela de contratos de locação
CREATE TABLE IF NOT EXISTS locadora_contratos (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    numero VARCHAR(50) NOT NULL COMMENT 'Número do contrato',
    cliente_id INT UNSIGNED NOT NULL COMMENT 'ID do cliente',
    veiculo_id INT UNSIGNED NOT NULL COMMENT 'ID do veículo',
    data_inicio DATE NOT NULL COMMENT 'Data de início da locação',
    data_fim DATE NOT NULL COMMENT 'Data de término prevista',
    data_devolucao DATE NULL COMMENT 'Data real de devolução',
    km_saida DECIMAL(10,0) NOT NULL DEFAULT 0 COMMENT 'Quilometragem na saída',
    km_retorno DECIMAL(10,0) NULL COMMENT 'Quilometragem no retorno',
    km_limite DECIMAL(10,0) NULL COMMENT 'KM limite do contrato',
    valor_diaria DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    quantidade_dias INT UNSIGNED NOT NULL DEFAULT 1,
    valor_total DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    valor_adicional DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT 'Valores adicionais (multas, danos, etc)',
    valor_final DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    status ENUM('aberto', 'em_andamento', 'encerrado', 'cancelado') NOT NULL DEFAULT 'aberto',
    forma_pagamento VARCHAR(50) 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_veiculo_id (veiculo_id),
    INDEX idx_status (status),
    INDEX idx_data_inicio (data_inicio),
    INDEX idx_data_fim (data_fim),
    UNIQUE KEY uk_numero (numero),
    FOREIGN KEY (cliente_id) REFERENCES clients(id) ON DELETE RESTRICT,
    FOREIGN KEY (veiculo_id) REFERENCES locadora_frota(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Contratos de locação';

-- Tabela de multas e infrações
CREATE TABLE IF NOT EXISTS locadora_multas (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    contrato_id INT UNSIGNED NOT NULL COMMENT 'ID do contrato',
    veiculo_id INT UNSIGNED NOT NULL COMMENT 'ID do veículo',
    tipo ENUM('multa', 'infracao', 'dano', 'limpeza') NOT NULL DEFAULT 'multa',
    descricao VARCHAR(255) NOT NULL COMMENT 'Descrição da multa/infração',
    data_ocorrencia DATE NOT NULL COMMENT 'Data da ocorrência',
    valor DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    pago BOOLEAN NOT NULL DEFAULT FALSE,
    data_pagamento DATE NULL,
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_contrato_id (contrato_id),
    INDEX idx_veiculo_id (veiculo_id),
    INDEX idx_tipo (tipo),
    INDEX idx_data_ocorrencia (data_ocorrencia),
    INDEX idx_pago (pago),
    FOREIGN KEY (contrato_id) REFERENCES locadora_contratos(id) ON DELETE CASCADE,
    FOREIGN KEY (veiculo_id) REFERENCES locadora_frota(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Multas e infrações';

-- Tabela de histórico de manutenção
CREATE TABLE IF NOT EXISTS locadora_manutencao (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    veiculo_id INT UNSIGNED NOT NULL COMMENT 'ID do veículo',
    tipo ENUM('preventiva', 'corretiva', 'revisao', 'troca_oleo', 'pneu', 'outro') NOT NULL DEFAULT 'preventiva',
    descricao VARCHAR(255) NOT NULL COMMENT 'Descrição da manutenção',
    km_manutencao DECIMAL(10,0) NOT NULL COMMENT 'Quilometragem da manutenção',
    data_manutencao DATE NOT NULL,
    valor DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    fornecedor VARCHAR(255) NULL COMMENT 'Fornecedor/OFicina',
    ncm VARCHAR(8) NULL COMMENT 'NCM específico para serviços de manutenção',
    cest VARCHAR(7) NULL COMMENT 'CEST específico',
    proxima_km DECIMAL(10,0) NULL COMMENT 'KM da próxima manutenção',
    proxima_data DATE NULL COMMENT 'Data da próxima manutenção',
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_veiculo_id (veiculo_id),
    INDEX idx_tipo (tipo),
    INDEX idx_data_manutencao (data_manutencao),
    INDEX idx_km_manutencao (km_manutencao),
    FOREIGN KEY (veiculo_id) REFERENCES locadora_frota(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Histórico de manutenção dos veículos';

-- Tabela de controle de quilometragem
CREATE TABLE IF NOT EXISTS locadora_km_historico (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    veiculo_id INT UNSIGNED NOT NULL COMMENT 'ID do veículo',
    contrato_id INT UNSIGNED NULL COMMENT 'ID do contrato (se relacionado)',
    km_anterior DECIMAL(10,0) NOT NULL COMMENT 'KM anterior',
    km_atual DECIMAL(10,0) NOT NULL COMMENT 'KM atual',
    km_percorrido DECIMAL(10,0) NOT NULL COMMENT 'KM percorrido',
    data_registro DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    tipo ENUM('saida', 'retorno', 'manutencao', 'manual') NOT NULL DEFAULT 'manual',
    observacoes TEXT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_veiculo_id (veiculo_id),
    INDEX idx_contrato_id (contrato_id),
    INDEX idx_data_registro (data_registro),
    FOREIGN KEY (veiculo_id) REFERENCES locadora_frota(id) ON DELETE CASCADE,
    FOREIGN KEY (contrato_id) REFERENCES locadora_contratos(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Histórico de quilometragem';

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

