<?php

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

class Routes extends CI_Controller {

    public function index() {
        header('Content-Type: application/javascript');
        $this->load->helper('session');
        $modulos_acciones_ids = array();
        $states = array();
        $menu_routes = array();
        $bottom_actions = array();
        if (check_id()) {
            $states[] = 'main';
            $this->load->model('modulos_acciones_roles_model');
            $modulos_acciones_del_rol = $this->modulos_acciones_roles_model->get_all_modulos_acciones_activas_by_rol_id(get_rol_id());
            $this->config->load('permisos');
            $grupos_permisos = $this->config->item('permisos');
            //logica para obtener lista de ids de acciones permitidas
            foreach ($modulos_acciones_del_rol as $modulo_accion_del_rol) {
                $modulos_acciones_ids[] = $modulo_accion_del_rol['modulo_accion_id'];
            }
            //logica para generar listado de js_routes a cargar
            foreach ($grupos_permisos as &$grupo_permisos) {
                $grupo_permisos['agregar_a_menu'] = FALSE;
                if (isset($grupo_permisos['categorias'])) {
                    foreach ($grupo_permisos['categorias'] as &$categoria) {
                        $categoria['agregar_a_menu'] = FALSE;
                        if (isset($categoria['modulos'])) {
                            foreach ($categoria['modulos'] as &$modulo) {
                                $modulo['agregar_a_menu'] = FALSE;
                                $modulo_sref_valido = FALSE;
                                if (isset($modulo['acciones'])) {
                                    foreach ($modulo['acciones'] as $accion_id => &$accion) {
                                        if ($accion['state'] === $modulo['sref']) {
                                            $modulo_sref_valido = TRUE;
                                            $modulo['accion_id'] = $accion_id;
                                        }
                                        unset($accion);
                                    }
                                }
                                if (!$modulo_sref_valido) {
                                    echo 'console.error("sref on module no valid: ' . $modulo['nombre_modulo'] . ');';
                                }
                                if (isset($modulo['acciones'])) {
                                    foreach ($modulo['acciones'] as $accion_id => &$accion) {
                                        foreach ($modulos_acciones_del_rol as $modulo_accion_del_rol) {
                                            if ($accion_id == $modulo_accion_del_rol['modulo_accion_id']) {
                                                if ($modulo['accion_id'] == $modulo_accion_del_rol['modulo_accion_id']) {
                                                    $grupo_permisos['agregar_a_menu'] = TRUE;
                                                    $categoria['agregar_a_menu'] = TRUE;
                                                    $modulo['agregar_a_menu'] = TRUE;
                                                }
                                                //logica para agregar states necesarios
                                                if ($accion['state'] !== '') {
                                                    if (isset($accion['bottom-icon']) && isset($accion['bottom-text'])) {
                                                        $bottom_actions[] = array('state' => $accion['state'], 'bottom_icon' => $accion['bottom-icon'], 'bottom_text' => $accion['bottom-text']);
                                                    }
                                                    $this->_add_state_to_states($accion['state'], $states);
                                                    if (isset($accion['states'])) {
                                                        foreach ($accion['states'] as $child_state) {
                                                            $this->_add_state_to_states($child_state['state'], $states);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        unset($accion);
                                    }
                                }
                                unset($modulo);
                            }
                        }
                        unset($categoria);
                    }
                }
                unset($grupo_permisos);
            }
            //logica para agregar al menu solamente los modulos habilitados
            foreach ($grupos_permisos as $grupo_permisos) {
                if ($grupo_permisos['agregar_a_menu']) {
                    if (isset($grupo_permisos['categorias'])) {
                        $categorias_aux = array();
                        foreach ($grupo_permisos['categorias'] as $categoria) {
                            if ($categoria['agregar_a_menu']) {
                                $modulos_aux = array();
                                if (isset($categoria['modulos'])) {
                                    foreach ($categoria['modulos'] as $modulo) {
                                        if ($modulo['agregar_a_menu']) {
                                            $modulo_aux = array();
                                            $modulo_aux['nombre_modulo'] = $modulo['nombre_modulo'];
                                            $modulo_aux['sref'] = $modulo['sref'];
                                            $modulos_aux[] = $modulo_aux;
                                        }
                                    }
                                }
                                $categoria_aux = array();
                                $categoria_aux['nombre_categoria'] = $categoria['nombre_categoria'];
                                $categoria_aux['icono'] = $categoria['icono'];
                                $categoria_aux['clase'] = $categoria['clase'];
                                $categoria_aux['modulos'] = $modulos_aux;
                                $categorias_aux[] = $categoria_aux;
                            }
                        }
                    }
                    $grupo_aux = array();
                    $grupo_aux['nombre_grupo'] = $grupo_permisos['nombre_grupo'];
                    $grupo_aux['categorias'] = $categorias_aux;
                    $menu_routes[] = $grupo_aux;
                }
            }
        }
        $data['routes_json'] = json_encode($menu_routes);
        $data['js_routes_path'] = $this->config->item('js_routes_path');
        $data['bottom_actions'] = json_encode($bottom_actions);
        $data['states'] = $states;
        $data['modulos_acciones_ids_json'] = json_encode($modulos_acciones_ids);
            $this->load->view('js_routes_view', $data);
    }

    function _add_state_to_states($full_state, &$states) {
        $state_parts = explode('.', $full_state);
        $state_aux = '';
        for ($index = 0; $index < count($state_parts); $index++) {
            if ($index > 0) {
                $state_aux .= '.';
            }
            $state_aux .= $state_parts[$index];
            $encontrado = FALSE;
            foreach ($states as $state) {
                if ($state === $state_aux) {
                    $encontrado = TRUE;
                }
            }
            if (!$encontrado) {
                $states[] = $state_aux;
            }
        }
    }
}
