<?php

class VeiculosController extends Controller
{
    private $veiculoModel;
    private $departamentoModel;
    private $combustivelModel;

    public function __construct()
    {
        if (!Sessao::estaLogado()) {
            URL::redirecionar('usuarios/login');
        }

        $this->veiculoModel      = $this->model('Veiculo');
        $this->departamentoModel = $this->model('Departamento');
        $this->combustivelModel  = $this->model('Combustivel');
    }

    public function index()
    {
        $dados = [
            'veiculos' => $this->veiculoModel->lerVeiculos()
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/veiculos/index.php',
            'dados'    => $dados
        ]);
    }

    public function cadastrar()
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'marca'             => strtoupper($formulario['marca'] ?? ''),
                'modelo'            => strtoupper($formulario['modelo'] ?? ''),
                'ano_modelo'        => $formulario['ano_modelo'] ?? null,
                'ano_fabricacao'    => $formulario['ano_fabricacao'] ?? null,
                'placa'             => strtoupper($formulario['placa'] ?? ''),
                'renavam'           => $formulario['renavam'] ?? '',
                'chassi'            => $formulario['chassi'] ?? '',
                'procedencia'       => strtoupper($formulario['procedencia'] ?? ''),
                'cor'               => strtoupper($formulario['cor'] ?? ''),
                'num_patrimonio'    => $formulario['num_patrimonio'] ?? '',
                'km_maximo'         => $formulario['km_maximo'] ?? null,
                'km_minimo'         => $formulario['km_minimo'] ?? null,
                'km_revisao'        => $formulario['km_revisao'] ?? null,
                'km_litro'          => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['km_litro'] ?? '')),
                'capacidade_tanque' => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['capacidade_tanque'] ?? '')),
                'id_departamento'   => $formulario['id_departamento'] ?? null,
                'id_combustivel'    => $formulario['id_combustivel'] ?? null,
                'id_usuario'        => $_SESSION['id_usuario'] ?? 1
            ];

            if ($this->veiculoModel->armazenar($dados)) {
                Sessao::mensagem('veiculo', 'Veículo cadastrado com sucesso!');
                URL::redirecionar('veiculos');
            } else {
                Sessao::mensagem('veiculo', 'Erro ao cadastrar veículo', 'alert alert-danger');
            }
        }

        $dados = [
            'departamentos' => $this->departamentoModel->listarTodos(),
            'combustiveis'  => $this->combustivelModel->listarTodos()
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/veiculos/cadastrar.php',
            'dados'    => $dados
        ]);
    }

    public function editar($id)
    {
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

            $dados = [
                'id_veiculo'        => $id,
                'marca'             => strtoupper($formulario['marca'] ?? ''),
                'modelo'            => strtoupper($formulario['modelo'] ?? ''),
                'ano_modelo'        => $formulario['ano_modelo'] ?? null,
                'ano_fabricacao'    => $formulario['ano_fabricacao'] ?? null,
                'placa'             => strtoupper($formulario['placa'] ?? ''),
                'renavam'           => $formulario['renavam'] ?? '',
                'chassi'            => $formulario['chassi'] ?? '',
                'procedencia'       => strtoupper($formulario['procedencia'] ?? ''),
                'cor'               => strtoupper($formulario['cor'] ?? ''),
                'num_patrimonio'    => $formulario['num_patrimonio'] ?? '',
                'km_maximo'         => $formulario['km_maximo'] ?? null,
                'km_minimo'         => $formulario['km_minimo'] ?? null,
                'km_revisao'        => $formulario['km_revisao'] ?? null,
                'km_litro'          => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['km_litro'] ?? '')),
                'capacidade_tanque' => str_replace(',', '.', preg_replace('/[^\d,\.]/', '', $formulario['capacidade_tanque'] ?? '')),
                'id_departamento'   => $formulario['id_departamento'] ?? null,
                'id_combustivel'    => $formulario['id_combustivel'] ?? null
            ];

            if ($this->veiculoModel->atualizar($dados)) {
                Sessao::mensagem('veiculo', 'Veículo atualizado com sucesso!');
                URL::redirecionar('veiculos');
            } else {
                Sessao::mensagem('veiculo', 'Erro ao atualizar veículo', 'alert alert-danger');
            }
        }

        $veiculo = $this->veiculoModel->lerVeiculoPorId($id);

        $dados = [
            'veiculo'       => $veiculo,
            'departamentos' => $this->departamentoModel->listarTodos(),
            'combustiveis'  => $this->combustivelModel->listarTodos()
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/veiculos/editar.php',
            'dados'    => $dados
        ]);
    }

    public function visualizar($id)
    {
        $dados = [
            'veiculo' => $this->veiculoModel->lerVeiculoPorId($id)
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/veiculos/visualizar.php',
            'dados'    => $dados
        ]);
    }

    public function excluir($id)
    {
        if ($this->veiculoModel->remover($id)) {
            Sessao::mensagem('veiculo', 'Veículo removido com sucesso!');
        } else {
            Sessao::mensagem('veiculo', 'Erro ao remover veículo', 'alert alert-danger');
        }
        URL::redirecionar('veiculos');
    }
}
