<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Vehiculos extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('mantenimiento/Vehiculo_model');
    }

    private function validar_placa($nro_placa) {
        $nro_placa = trim($nro_placa);

        if (strlen($nro_placa) < 6 || strlen($nro_placa) > 10) {
            return 'El número de placa debe tener entre 6 y 10 caracteres';
        }

        return true;
    }

    public function index() {
        $this->validar_permiso('vehiculos_ver');

        $data['titulo'] = 'Vehículos';
        $data['vehiculos'] = $this->Vehiculo_model->listar();
        $this->layout('mantenimiento/vehiculos/index', $data);
    }

    public function create() {
        $this->validar_permiso('vehiculos_crear');

        $data['titulo'] = 'Nuevo Vehículo';
        $data['entidades_emisoras'] = $this->Vehiculo_model->listar_entidades_emisoras();
        $this->layout('mantenimiento/vehiculos/create', $data);
    }

    public function store() {
        $this->validar_permiso('vehiculos_crear');

        $this->form_validation->set_rules('nro_placa', 'Nro. Placa', 'required|trim|max_length[20]');
        $this->form_validation->set_rules('marca', 'Marca', 'required|trim|max_length[100]');
        $this->form_validation->set_rules('entidad_emisora_id', 'Entidad emisora', 'required');
        $this->form_validation->set_rules('nro_autorizacion', 'Nro. Autorización', 'trim|max_length[50]');

        if ($this->form_validation->run() == FALSE) {
            $this->create();
            return;
        }

        $nro_placa = strtoupper(trim($this->input->post('nro_placa', TRUE)));
        $marca = trim($this->input->post('marca', TRUE));
        $entidad_emisora_id = $this->input->post('entidad_emisora_id', TRUE);
        $nro_autorizacion = trim($this->input->post('nro_autorizacion', TRUE));

        $validacionPlaca = $this->validar_placa($nro_placa);

        if ($validacionPlaca !== true) {
            $this->session->set_flashdata('error', $validacionPlaca);
            redirect('mantenimiento/vehiculos/create');
        }

        if (!$this->Vehiculo_model->obtener_entidad_emisora($entidad_emisora_id)) {
            $this->session->set_flashdata('error', 'La entidad emisora seleccionada no es válida');
            redirect('mantenimiento/vehiculos/create');
        }

        if ($this->Vehiculo_model->existe_placa($nro_placa)) {
            $this->session->set_flashdata('error', 'El número de placa ya existe');
            redirect('mantenimiento/vehiculos/create');
        }

        $data = array(
            'nro_placa' => $nro_placa,
            'marca' => $marca,
            'entidad_emisora_id' => $entidad_emisora_id,
            'nro_autorizacion' => $nro_autorizacion,
            'estado' => 1,
            'created_by' => $this->session->userdata('id')
        );

        if ($this->Vehiculo_model->insertar($data)) {
            $this->session->set_flashdata('success', 'Vehículo registrado correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo registrar el vehículo');
        }

        redirect('mantenimiento/vehiculos');
    }

    public function edit($id) {
        $this->validar_permiso('vehiculos_editar');

        $vehiculo = $this->Vehiculo_model->obtener($id);

        if (!$vehiculo) {
            show_404();
        }

        $data['titulo'] = 'Editar Vehículo';
        $data['vehiculo'] = $vehiculo;
        $data['entidades_emisoras'] = $this->Vehiculo_model->listar_entidades_emisoras();
        $this->layout('mantenimiento/vehiculos/edit', $data);
    }

    public function update($id) {
        $this->validar_permiso('vehiculos_editar');

        $vehiculo = $this->Vehiculo_model->obtener($id);

        if (!$vehiculo) {
            show_404();
        }

        $this->form_validation->set_rules('nro_placa', 'Nro. Placa', 'required|trim|max_length[20]');
        $this->form_validation->set_rules('marca', 'Marca', 'required|trim|max_length[100]');
        $this->form_validation->set_rules('entidad_emisora_id', 'Entidad emisora', 'required');
        $this->form_validation->set_rules('nro_autorizacion', 'Nro. Autorización', 'trim|max_length[50]');

        if ($this->form_validation->run() == FALSE) {
            $this->edit($id);
            return;
        }

        $nro_placa = strtoupper(trim($this->input->post('nro_placa', TRUE)));
        $marca = trim($this->input->post('marca', TRUE));
        $entidad_emisora_id = $this->input->post('entidad_emisora_id', TRUE);
        $nro_autorizacion = trim($this->input->post('nro_autorizacion', TRUE));

        $validacionPlaca = $this->validar_placa($nro_placa);

        if ($validacionPlaca !== true) {
            $this->session->set_flashdata('error', $validacionPlaca);
            redirect('mantenimiento/vehiculos/edit/' . $id);
        }

        if (!$this->Vehiculo_model->obtener_entidad_emisora($entidad_emisora_id)) {
            $this->session->set_flashdata('error', 'La entidad emisora seleccionada no es válida');
            redirect('mantenimiento/vehiculos/edit/' . $id);
        }

        if ($this->Vehiculo_model->existe_placa($nro_placa, $id)) {
            $this->session->set_flashdata('error', 'El número de placa ya existe');
            redirect('mantenimiento/vehiculos/edit/' . $id);
        }

        $data = array(
            'nro_placa' => $nro_placa,
            'marca' => $marca,
            'entidad_emisora_id' => $entidad_emisora_id,
            'nro_autorizacion' => $nro_autorizacion,
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $this->session->userdata('id')
        );

        if ($this->Vehiculo_model->actualizar($id, $data)) {
            $this->session->set_flashdata('success', 'Vehículo actualizado correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo actualizar el vehículo');
        }

        redirect('mantenimiento/vehiculos');
    }

    public function estado($id) {
        $this->validar_permiso('vehiculos_eliminar');

        $vehiculo = $this->Vehiculo_model->obtener($id);

        if (!$vehiculo) {
            show_404();
        }

        $nuevoEstado = ($vehiculo->estado == 1) ? 0 : 1;

        if ($this->Vehiculo_model->cambiarEstado($id, $nuevoEstado, $this->session->userdata('id'))) {
            $mensaje = ($nuevoEstado == 1) ? 'Vehículo activado correctamente' : 'Vehículo desactivado correctamente';
            $this->session->set_flashdata('success', $mensaje);
        } else {
            $this->session->set_flashdata('error', 'No se pudo cambiar el estado del vehículo');
        }

        redirect('mantenimiento/vehiculos');
    }
}