<?php

class Veiculo
{
    private $db;

    public function __construct()
    {
        $this->db = new Database();
    }

    // Retorna todos os veículos não removidos
    public function listarTodos()
{
    $this->db->query("
        SELECT v.*, 
               d.nome_departamento, 
               c.nome AS nome_combustivel
        FROM veiculos v
        LEFT JOIN departamentos d ON v.id_departamento = d.id_departamento
        LEFT JOIN combustiveis c ON v.id_combustivel = c.id_combustivel
        WHERE v.removido IS NULL
        ORDER BY v.marca, v.modelo
    ");
    
    return $this->db->resultados();
}


    public function lerVeiculos()
    {
        return $this->listarTodos();
    }

   public function lerVeiculoPorId($id)
{
    $this->db->query("
        SELECT v.*, 
               d.nome_departamento, 
               c.nome AS nome_combustivel
        FROM veiculos v
        LEFT JOIN departamentos d ON v.id_departamento = d.id_departamento
        LEFT JOIN combustiveis c ON v.id_combustivel = c.id_combustivel
        WHERE v.id_veiculo = :id
    ");
    $this->db->bind(':id', $id);
    return $this->db->resultado();
}



    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO veiculos (
                marca, modelo, ano_modelo, ano_fabricacao, placa, renavam, chassi, procedencia, cor, 
                num_patrimonio, km_maximo, km_minimo, km_revisao, km_litro, capacidade_tanque, 
                id_departamento, id_combustivel, id_usuario
            ) VALUES (
                :marca, :modelo, :ano_modelo, :ano_fabricacao, :placa, :renavam, :chassi, :procedencia, :cor, 
                :num_patrimonio, :km_maximo, :km_minimo, :km_revisao, :km_litro, :capacidade_tanque, 
                :id_departamento, :id_combustivel, :id_usuario
            )
        ");

        $this->bindDados($dados);
        return $this->db->executa();
    }

    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE veiculos SET
                marca = :marca,
                modelo = :modelo,
                ano_modelo = :ano_modelo,
                ano_fabricacao = :ano_fabricacao,
                placa = :placa,
                renavam = :renavam,
                chassi = :chassi,
                procedencia = :procedencia,
                cor = :cor,
                num_patrimonio = :num_patrimonio,
                km_maximo = :km_maximo,
                km_minimo = :km_minimo,
                km_revisao = :km_revisao,
                km_litro = :km_litro,
                capacidade_tanque = :capacidade_tanque,
                id_departamento = :id_departamento,
                id_combustivel = :id_combustivel,
                alterado = NOW()
            WHERE id_veiculo = :id_veiculo
        ");

        $this->bindDados($dados, true);
        return $this->db->executa();
    }

    public function remover($id)
    {
        $this->db->query("UPDATE veiculos SET removido = NOW() WHERE id_veiculo = :id_veiculo");
        $this->db->bind("id_veiculo", $id);
        return $this->db->executa();
    }

    // Métodos auxiliares

    private function bindDados($dados, $comId = false)
    {
        $this->db->bind("marca", $dados['marca']);
        $this->db->bind("modelo", $dados['modelo']);
        $this->db->bind("ano_modelo", $dados['ano_modelo']);
        $this->db->bind("ano_fabricacao", $dados['ano_fabricacao']);
        $this->db->bind("placa", $dados['placa']);
        $this->db->bind("renavam", $dados['renavam']);
        $this->db->bind("chassi", $dados['chassi']);
        $this->db->bind("procedencia", $dados['procedencia']);
        $this->db->bind("cor", $dados['cor']);
        $this->db->bind("num_patrimonio", $dados['num_patrimonio']);
        $this->db->bind("km_maximo", $dados['km_maximo']);
        $this->db->bind("km_minimo", $dados['km_minimo']);
        $this->db->bind("km_revisao", $dados['km_revisao']);
        $this->db->bind("km_litro", $dados['km_litro']);
        $this->db->bind("capacidade_tanque", $dados['capacidade_tanque']);
        $this->db->bind("id_departamento", $dados['id_departamento']);
        $this->db->bind("id_combustivel", $dados['id_combustivel']);
        if ($comId) {
            $this->db->bind("id_veiculo", $dados['id_veiculo']);
        } else {
            $this->db->bind("id_usuario", $dados['id_usuario']);
        }
    }

    // Métodos adicionais usados no controller

    public function lerDepartamentos()
    {
        $this->db->query("SELECT * FROM departamentos WHERE removido IS NULL ORDER BY nome_departamento");
        return $this->db->resultados();
    }

    public function lerCombustiveis()
    {
        $this->db->query("SELECT * FROM combustiveis WHERE removido IS NULL ORDER BY nome_combustivel");
        return $this->db->resultados();
    }

   public function atualizarKmMaximo($id_veiculo, $km_maximo)
{
    $this->db->query("UPDATE veiculos SET km_maximo = :km WHERE id_veiculo = :id");
    $this->db->bind(':km', $km_maximo);
    $this->db->bind(':id', $id_veiculo);
    return $this->db->executa();
}

}
