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

class Transportistas extends MY_Controller {

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

    private function validar_ruc($ruc) {
        $ruc = trim($ruc);

        if (!ctype_digit($ruc) || strlen($ruc) != 11) {
            return 'El RUC debe tener exactamente 11 dígitos';
        }

        return true;
    }

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

        $data['titulo'] = 'Transportistas';
        $data['transportistas'] = $this->Transportista_model->listar();
        $this->layout('mantenimiento/transportistas/index', $data);
    }

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

        $data['titulo'] = 'Nuevo Transportista';
        $data['entidades_emisoras'] = $this->Transportista_model->listar_entidades_emisoras();
        $this->layout('mantenimiento/transportistas/create', $data);
    }

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

        $this->form_validation->set_rules('ruc', 'RUC', 'required|trim|max_length[11]');
        $this->form_validation->set_rules('razon_social', 'Razón Social', 'required|trim|max_length[200]');
        $this->form_validation->set_rules('nro_registro_mtc', 'Nro. Registro MTC', 'trim|max_length[50]');
        $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;
        }

        $ruc = trim($this->input->post('ruc', TRUE));
        $razon_social = trim($this->input->post('razon_social', TRUE));
        $nro_registro_mtc = trim($this->input->post('nro_registro_mtc', TRUE));
        $entidad_emisora_id = $this->input->post('entidad_emisora_id', TRUE);
        $nro_autorizacion = trim($this->input->post('nro_autorizacion', TRUE));

        $validacionRuc = $this->validar_ruc($ruc);

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

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

        if ($this->Transportista_model->existe_ruc($ruc)) {
            $this->session->set_flashdata('error', 'El RUC ya existe');
            redirect('mantenimiento/transportistas/create');
        }

        if ($this->Transportista_model->existe_razon_social($razon_social)) {
            $this->session->set_flashdata('error', 'La razón social ya existe');
            redirect('mantenimiento/transportistas/create');
        }

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

        if ($this->Transportista_model->insertar($data)) {
            $this->session->set_flashdata('success', 'Transportista registrado correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo registrar el transportista');
        }

        redirect('mantenimiento/transportistas');
    }

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

        $transportista = $this->Transportista_model->obtener($id);

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

        $data['titulo'] = 'Editar Transportista';
        $data['transportista'] = $transportista;
        $data['entidades_emisoras'] = $this->Transportista_model->listar_entidades_emisoras();
        $this->layout('mantenimiento/transportistas/edit', $data);
    }

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

        $transportista = $this->Transportista_model->obtener($id);

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

        $this->form_validation->set_rules('ruc', 'RUC', 'required|trim|max_length[11]');
        $this->form_validation->set_rules('razon_social', 'Razón Social', 'required|trim|max_length[200]');
        $this->form_validation->set_rules('nro_registro_mtc', 'Nro. Registro MTC', 'trim|max_length[50]');
        $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;
        }

        $ruc = trim($this->input->post('ruc', TRUE));
        $razon_social = trim($this->input->post('razon_social', TRUE));
        $nro_registro_mtc = trim($this->input->post('nro_registro_mtc', TRUE));
        $entidad_emisora_id = $this->input->post('entidad_emisora_id', TRUE);
        $nro_autorizacion = trim($this->input->post('nro_autorizacion', TRUE));

        $validacionRuc = $this->validar_ruc($ruc);

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

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

        if ($this->Transportista_model->existe_ruc($ruc, $id)) {
            $this->session->set_flashdata('error', 'El RUC ya existe');
            redirect('mantenimiento/transportistas/edit/' . $id);
        }

        if ($this->Transportista_model->existe_razon_social($razon_social, $id)) {
            $this->session->set_flashdata('error', 'La razón social ya existe');
            redirect('mantenimiento/transportistas/edit/' . $id);
        }

        $data = array(
            'ruc' => $ruc,
            'razon_social' => $razon_social,
            'nro_registro_mtc' => $nro_registro_mtc,
            '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->Transportista_model->actualizar($id, $data)) {
            $this->session->set_flashdata('success', 'Transportista actualizado correctamente');
        } else {
            $this->session->set_flashdata('error', 'No se pudo actualizar el transportista');
        }

        redirect('mantenimiento/transportistas');
    }

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

        $transportista = $this->Transportista_model->obtener($id);

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

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

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

        redirect('mantenimiento/transportistas');
    }
}