<?php

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

require_once(APPPATH . 'entities/user_entity' . EXT);
require_once(APPPATH . 'entities/admin_entity' . EXT);

class Login_lib {

    private $CI_instance;
    var $user_data;
    
    public function __construct() {
        $this->CI_instance = & get_instance();
        $this->session_type = $this->CI_instance->config->item('login_type');
        $this->CI_instance->load->helper('password');
        if ($this->session_type == 'session') {
            $this->CI_instance->load->library('session');
        } else {
            $this->CI_instance->load->helper('cookie');
        }
    }

    public function set($user_obj) {
 	$this->CI_instance->load->library('get_uuid');
        $session_id = $this->CI_instance->get_uuid->_get_uuid();
        if ($this->session_type == 'session') {
            $session_array = array(
                'session_id' => $session_id,
                'user_id' => $user_obj->id,
                //'role_id' => $user_obj->role_id,
                'is_logged_in' => true
            );
            $this->CI_instance->session->set_userdata($session_array);
        } else {
            // lets code for cookie later
        }
        $this->user_data = $user_obj;
    }
    public function get(){
        return $this->user_data;
    }
    public function get_session_data($param){
        if ($this->session_type == 'session') {
            $session_data = $this->CI_instance->session->all_userdata();
            if(count($session_data) > 0 && isset($session_data[$param])){
                return $session_data[$param];
            }else{
                return false;
            }
        }else {
            // lets code for cookie later
        }
    }

    public function check_logged_in() {
        if ($this->session_type == 'session') {
            if($this->get_session_data('is_logged_in')){
                return true;
            }else{
                return false;
            }
        }else {
            // lets code for cookie later
        }
    }
    public function auth($data, $password,$field='contact') {

        $admin_obj = new Admin_entity();
       
        if($field=='email'){
            $admin_obj->email = $data;
        }
        else
        {
           $admin_obj->contact = $data;
        }
        $row = $admin_obj->get();
       
        if (count($row['result']) > 0) {
            $admin_obj->_get_object($row['result'][0]);

            if (!isset($admin_obj->id)) { 
                return false;
            } else {
               if (validate_password($password, $admin_obj->password)) {
                            $admin_obj->role='Admin';
                            $admin_obj->first_name='Admin';
                            $admin_obj->image='';
                            $this->set($admin_obj);
                            return true;
                        } else {
                            
                            return false;
                }
            }
        }
    }

    public function destroy() {
        if ($this->session_type == 'session') {
            $this->CI_instance->session->sess_destroy();
        }else{
            
        }
    }
    
    public function auth_user($data, $password,$field='contact') {

        $user_details_obj = new User_details_entity();
        
        if($field=='email'){
            $user_details_obj->email = $data;
        }
        else
        {
            $user_details_obj->contact = $data;
            
        }
        $row = $user_details_obj->get();
       
        if (!empty($row['result'])) {
            if ($row['success'] == true) {
                $user_details_obj->_get_object($row['result'][0]);

                if ($user_details_obj->id == '') {
                    return false;
                } else {
                    
                    if (validate_password($password, $user_details_obj->password)) {
                        $role = $user_details_obj->get_role($user_details_obj->role);
                        $user_details_obj->role=$role['result'][0]['role_name'];
                        $this->set($user_details_obj);
                        return true;
                    } else { 

                        return false;
                    }
                }
            }
        } else {
            $data = $this->auth($data, $password,$field);
            return $data;
        }
    }
    
    public function auth_guest_user($data, $password,$field='contact') {

        $guest_user_obj = new Guest_user_entity();
        if($field=='email'){
            $guest_user_obj->email = $data;
        }
        else
        {
            $guest_user_obj->contact = $data;
            
        }
        $row = $guest_user_obj->get();
       
        if (!empty($row['result'])) {
            if ($row['success'] == true) {
                $guest_user_obj->_get_object($row['result'][0]);

                if ($guest_user_obj->id == '') {
                    return false;
                } else {
                    
                    if (validate_password($password, $guest_user_obj->password)) {
                        
                        $this->set($guest_user_obj);
                        return true;
                    } else { 

                        return false;
                    }
                }
            }
        } else {
            return false;
        }
    }

}
