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

/**
 * Userlib class
 */

/**
 * user table 을 관리하는 class 입니다.
 */
class Userlib extends CI_Controller
{

    private $CI;

    private $mb;

    private $uesr_group;


    function __construct()
    {
        $this->CI = & get_instance();
        $this->CI->load->model( array('User_model'));
        $this->CI->load->helper( array('array'));
    }


    /**
     * 접속한 유저가 회원인지 아닌지를 판단합니다
     */
    public function is_user()
    {
        if ($this->CI->session->userdata('user_id')) {
            return $this->CI->session->userdata('user_id');
        } else {
            return false;
        }
    }


    /**
     * 접속한 유저가 관리자인지 아닌지를 판단합니다
     */
    public function is_admin($check = array())
    {
        if ($this->item('user_is_admin') == '1') {
            return 'super';
        }
        if ($this->item('user_is_admin') == '2') {
            return 'general';
        }
		return false;
    }


    /**
     * user, user_meta 테이블에서 정보를 가져옵니다
     */
    public function get_user()
    {
        if ($this->is_user()) {
            if (empty($this->mb)) {
                $user = $this->CI->User_model->get_by_id($this->is_user());
                $metas = $this->get_all_meta(element('user_id', $user));
                if (is_array($metas)) {
                    $user = array_merge($user, $metas);
                }
                $user['social'] = $this->get_all_social_meta(element('user_id', $user));
                $this->mb = $user;
            }
            return $this->mb;
        } else {
            return false;
        }
    }


    /**
     * get_user 에서 가져온 데이터의 item 을 보여줍니다
     */
    public function item($column = '')
    {
        if (empty($column)) {
            return false;
        }
        if (empty($this->mb)) {
            $this->get_user();
        }
        if (empty($this->mb)) {
            return false;
        }
        $user = $this->mb;

        return isset($user[$column]) ? $user[$column] : false;
    }


    /**
     * get_user 에서 가져온 데이터의 item 을 보여줍니다
     */
    public function socialitem($column = '')
    {
        if (empty($column)) {
            return false;
        }
        if (empty($this->mb)) {
            $this->get_user();
        }
        if (empty($this->mb)) {
            return false;
        }
        $user = $this->mb;

        return isset($user['social']) && isset($user['social'][$column]) ? $user['social'][$column] : false;
    }



    /**
     * user_meta 테이블에서 가져옵니다
     */
    public function get_all_meta($user_id = 0)
    {
        $user_id = (int) $user_id;
        if (empty($user_id) OR $user_id < 1) {
            return false;
        }

        $this->CI->load->model('User_meta_model');
        $result = $this->CI->User_meta_model->get_all_meta($user_id);
        return $result;
    }


    /**
     * social_meta 테이블에서 가져옵니다
     */
    public function get_all_social_meta($user_id = 0)
    {
        $user_id = (int) $user_id;
        if (empty($user_id) OR $user_id < 1) {
            return false;
        }
        if ($this->CI->db->table_exists('social_meta') === false) {
            return;
        }

        $this->CI->load->model('Social_meta_model');
        $result = $this->CI->Social_meta_model->get_all_meta($user_id);
        return $result;
    }

    /**
     * 회원삭제 남깁니다
     */
    public function delete_user($user_id = 0)
    {
        $user_id = (int) $user_id;
        if (empty($user_id) OR $user_id < 1) {
            return false;
        }

        $this->CI->load->model(
            array(
                'User_model', 'User_auth_email_model', 
                'User_meta_model', 'Social_meta_model', 
            )
        );

        $deletewhere = array(
            'user_id' => $user_id,
        );
        $this->CI->User_model->delete_where($deletewhere);
        $this->CI->User_auth_email_model->delete_where($deletewhere);
        $this->CI->User_meta_model->delete_where($deletewhere);
        $this->CI->Social_meta_model->delete_where($deletewhere);

        return true;
    }

}
