<?php if ( ! defined('BASEPATH')) exit('No esta permitido el acceso directo al script');
/*Mauricio García - garmauco@gmail.com, developer@3mas1r.com*/
class Usuario extends CI_Controller{
	public function __construct()
	{
		/*Cargamos los metodos asociados a la clase CI_Controller, por medio de una inyección de dependencias*/
		parent:: __construct();
		$this->load->model('Usuario_model');
        if( !$this->session->userdata('isLoggedIn') ) {
					redirect('login');
				}
        else{
           $this->load->model('Usuario_model');


           $this->Usuario_model->last_activity($this->session->userdata('documento'));
        }
	}

	public function index()
	{
		$rol=$this->Usuario_model->usuario_rol($this->session->userdata('documento'));
		if ($rol > MODULE_USUARIO){
			redirect('dashboard');
		}
				$this->show_form(ADMIN);

  }

    public function add(){
        $id=NULL;
        $this->form_validation->set_rules('documento', 'Documento', 'required|trim|min_length[2]|callback_documento_exists['.$id.']');/*hacemos un callback de la funcion para comparar el nombre de usuario*/
        $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|callback_email_exists['.$id.']');
        $this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[6]');
        $this->form_validation->set_rules('nombre', 'Nombre', 'required|trim|min_length[3]');
        $this->form_validation->set_rules('apellido', 'Apellido', 'required|trim|min_length[3]');
        $this->form_validation->set_rules('genero', 'Genero', 'required|trim');
        $this->form_validation->set_rules('rol', 'Rol', 'required|trim');


        if ($this->form_validation->run() == FALSE){
    	   $this->show_form(ADMIN,NULL,'index');
    	}
        else{
            $data = $this->input->post();
            $documento = $data['documento'];
            $email = $data['email'];
            $nombre = $data['nombre'];
            $apellido = $data['apellido'];
            $genero = $data['genero'];
            $password = $data['password'];
            $imagen = NULL;
            $rol = $data['rol'];
            $estado = $data['estado'];
            $eps = $data['eps'];
            $afp = $data['afp'];
            $arl = $data['arl'];
            $ccf = $data['ccf'];

            $this->Usuario_model->create_new_user($documento,$email,$nombre,$apellido,$genero,$password,$imagen,$rol,$eps,$afp,$arl,$ccf,$estado,NOW(),0,0);
            $this->session->set_flashdata('success_msg', 'El Registro se Guardo exitosamente');
            redirect('/usuario', 'refresh');
        }


    }

    public function delete($id = NULL){
			if (ADMIN >= $this->session->userdata('rol')){
        if ($id != NULL){
            $this->Usuario_model->delete($id);
        }
        redirect('/usuario', 'refresh');
			}
    }

    public function edit($id = NULL){
        if ($id != NULL){
            $this->show_form(ADMIN,'1','edit', $id);
        }
        else{
            redirect('/usuario', 'refresh');
        }
    }
    /*enviamos el id y documento para la comparacion en el modelo*/
    public function documento_exists($documento, $id){

        $validation = $this->Usuario_model->documento_duplicate($id, $documento);
        if ($validation === TRUE){
            $this->form_validation->set_message('documento_exists', 'El Documento '.$documento.' ya se encuentra registrado');
            return FALSE;
        }
        else{
            return TRUE;
        }
    }

    /*enviamos el id y email para la comparacion en el modelo*/
    public function email_exists($email, $id){

        $validation = $this->Usuario_model->email_duplicate($id, $email);
        if ($validation === TRUE){
            $this->form_validation->set_message('email_exists', 'El Email '.$email.' ya se encuentra registrado');
            return FALSE;
        }
        else{
            return TRUE;
        }
    }

    /*funcion que muestra el formulario y los errores de validación*/
    public function show_form($access = USUARIO, $model = NULL, $page='index', $id = NULL, $title='Gesti&oacute;n de Usuarios', $pagination='usuario/pagination',$modal='Activate'){
				if ($access >= $this->session->userdata('rol')){// Permisos de Acceso
					if ($model != NULL){
	            $data['usuario'] = $this->Usuario_model->edit($id);
	        }

	        $data['roles'] = $this->Usuario_model->roles();
					//$data['modulos'] = $this->Usuario_model->modulos();
	        $data['modalDelete'] =$modal;/*Vista usada para la confirmacion de eliminacion de un registro*/
	        $data['content'] = "usuario/".$page;
	        $data['pagination'] = $pagination;
	        $data['title_page'] = $title;
	        $this->load->view("templates/layout", $data);
				}

    }
    /*Actualizar informacion del Registro*/
    public function update(){
        $data = $this->input->post();
        $id = $data['id'];
        $documento = $data['documento'];
        $email = $data['email'];
        $nombre = $data['nombre'];
        $apellido = $data['apellido'];
        $genero = $data['genero'];
        $password = $data['password'];
        $eps = $data['eps'];
        $afp = $data['afp'];
        $arl = $data['arl'];
        $ccf = $data['ccf'];
        $imagen = NULL;
        $rol = $data['rol'];
        $estado = $data['estado'];
        $this->form_validation->set_rules('documento', 'Nombre de Usuario', 'required|trim|min_length[2]|callback_documento_exists['.$id.']');/*hacemos un callback de la funcion para comparar el nombre de usuario*/
        $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|callback_email_exists['.$id.']');
        $this->form_validation->set_rules('password', 'Password', 'trim|min_length[6]');
        $this->form_validation->set_rules('nombre', 'Nombre', 'required|trim|min_length[3]');
        $this->form_validation->set_rules('apellido', 'Apellido', 'required|trim|min_length[3]');
        $this->form_validation->set_rules('genero', 'Genero', 'required|trim');
        $this->form_validation->set_rules('rol', 'Rol', 'required|trim');


        if ($this->form_validation->run() == FALSE){
           $this->show_form(SUPERADMIN,'error','edit',$id);
        }
        else{
            $this->Usuario_model->update($id, $documento, $email, $nombre, $apellido, $genero, $password, $imagen, $rol, $eps, $afp, $arl, $ccf, $estado);
            $this->session->set_flashdata('success_msg', 'El Registro ha sido Actualizado');
            redirect('/usuario', 'refresh');
        }
    }
    /*Obtenemos todos los registros y los convertimos a formato json para usarlos en Angular*/
    public function pagination(){
        //header('Content-Type: application/json');
        $list = $this->Usuario_model->get_all();
        echo json_encode($list);

    }

		function change_password(){
			$this->show_form(USUARIO,NULL,'cambiar_pass',NULL,'Cambiar Contraseña',NULL,NULL);
		}
		function update_password(){

        $this->form_validation->set_rules('contraactual', 'Contrase&ntilde;a Actual', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('contranueva', 'Nueva Contrase&ntilde;a', 'trim|required|min_length[4]|max_length[32]');
         $this->form_validation->set_rules('contraconfirm','Confirmar Contrase&ntilde;a','trim|required|min_length[4]|max_length[32]|matches[contranueva]');
        if ($this->form_validation->run() == FALSE){
    	   $this->show_form(USUARIO,NULL,'cambiar_pass',NULL,'Cambiar Contraseña',NULL,NULL);
    	}
        else{
            $data = $this->input->post();
            $contraactual = $data['contraactual'];
            $contranueva = $data['contranueva'];
            $contraconfirm = $data['contraconfirm'];

            //$this->Cambiarcontra_model->Change_password($contraactual, $contranueva);
            switch ($this->Usuario_model->Change_password($contraactual, $contranueva)) {
                case 1:
                    $this->session->set_flashdata('success_msg', 'El cambio de contrase&ntilde;a se llevo exitosamente');
                    break;
                case 2:
                    $this->session->set_flashdata('error_msg', 'Algo no funcion&oacute;, la contrase&ntilde;a no se Actualiz&oacute;');
                    break;
                case 3:
                    $this->session->set_flashdata('error_msg', 'Contrase&ntilde;a Actual incorrecta');
                    break;
            }
            redirect('/usuario/change_password', 'refresh');
        }


    }


}
?>
