<?php
namespace model\wdzy;
use \model;
use model\rcaApi;
use model\user as ModelUser;
use model\wdzy;


class user extends wdzy
{

    /**
     * @param  Array $userArr adm_user表用户信息
     * @method 创建用户
     * @author zhengweihua 
     * @copyright 2025-07-16
     */
    public function createUser($userArr)
    {   
        //资源库会员密码要求，必须包含大写字母、小写字母、数字和特殊字符
        if($userArr['ori_au_pass']){
            $pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).+$/';
            if(preg_match($pattern, $userArr['ori_au_pass']) !== 1){
                $userArr['ori_au_pass'] = 'Frey@123456';
            }
        }
        $where = [];
        if(\mvc::$cfg['RCAAPI']['tenantId']){
            $where['TenantId'] = \mvc::$cfg['RCAAPI']['tenantId'];
        }

        $existEmail = $this->db->get('abpusers','Email',array_merge(['Email'=>$userArr['au_email']],$where));
        if($existEmail){
            $userArr['au_email'] = date('Ymd').mt_rand(100,999).'_'.$userArr['au_email'];
        }
        $existName = $this->db->get('abpusers','Id',array_merge(['userName'=>$userArr['au_id']],$where));
        if(!$existName){
            $rcaApi = new rcaApi();
            $postArr = [
                'userName'=> $userArr['au_id'],
                'name'=>$userArr['au_name'],
                'email'=>$userArr['au_email'],
                'phoneNumber'=> $userArr['au_mobile'],
                'password'=> $userArr['ori_au_pass']?$userArr['ori_au_pass']:'Frey@123456', //默认密码
            ];
            $res = $rcaApi->Get('Users/create',[],$postArr);
        }else{
            $this->updateUser($userArr);
        }
       
        return $res;
    }

    /**
     * @param  Array $userArr
     * @method 更新用户
     * @author zhengweihua 
     * @copyright 2025-07-16
     */
    public function updateUser($userArr)
    {           
        $swhere = [];
        if(\mvc::$cfg['RCAAPI']['tenantId']){
            $swhere['TenantId'] = \mvc::$cfg['RCAAPI']['tenantId'];
        }
        if(!$userArr['id'])
        {       
            $where = ['userName'=>$userArr['au_id'],'IsDeleted'=>0];
           
            $abpuserId = $this->db->get('abpusers','Id',array_merge($where,$swhere));
            if(!$abpuserId){
                return [];
            }
            $userArr['id'] = $abpuserId;
        }
        $existEmail = $this->db->get('abpusers','Email',array_merge(['Email'=>$userArr['au_email'],'userName[!]'=>$userArr['au_id']],$swhere));
        if($existEmail){
            $userArr['au_email'] = date('Ymd').mt_rand(100,999).'_'.$userArr['au_email'];
        }
        $rcaApi = new rcaApi();
        $postArr['userId'] = $userArr['id'];
        $postArr['userInfo'] = [
            'userName'=> $userArr['au_id'],
            'name'=>$userArr['au_name'],
            'email'=>$userArr['au_email'],
            'phoneNumber'=> $userArr['au_mobile'],
        ];
        //资源库会员密码要求，必须包含大写字母、小写字母、数字和特殊字符
        if($userArr['ori_au_pass']){
            $pattern = '/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).+$/';
            if(preg_match($pattern, $userArr['ori_au_pass']) !== 1){
                $userArr['ori_au_pass'] = 'Frey@123456';
            }
        }
        if(isset($userArr['ori_au_pass']) && !empty($userArr['ori_au_pass'])){
            $postArr['userInfo']['password'] = $userArr['ori_au_pass'];
        }
        $res = $rcaApi->Get('Users/update',[],$postArr);
        return $res;
    }

    /**
     * @method 同步用户
     * @author zhengweihua 
     * @copyright 2025-07-16
     */
    public function syncUser()
    {
        //菲尔后端用户
        $ModelUser = new ModelUser();
        $userList  = $ModelUser->db->select('adm_user','*',['au_status'=>1,'au_id[!]'=>['admin','SYS','test3']]);
        //资源库用户
        $where = [];
        if(\mvc::$cfg['RCAAPI']['tenantId']) {
            $where['TenantId'] = \mvc::$cfg['RCAAPI']['tenantId'];
        }
        $apbUserList  = $this->db->select('abpusers',['Id','userName'],$where);
        $apbUserList  = array_column($apbUserList,'Id', 'userName');
        foreach ($userList as $key => $val) 
        {
            if(!isset($apbUserList[$val['au_id']]))
            {
                $res = $this->createUser($val);
                $apbUserList[$val['au_id']] = $res['id'];
            }
            else
            {
                $val['id'] = $apbUserList[$val['au_id']];
                $this->updateUser($val);
            }
        }
    }

    public function getApbUserId($au_id)
    {   
        if(empty($au_id))
        {
            return '';
        }
        $where = ['userName'=>$au_id];
        if(\mvc::$cfg['RCAAPI']['tenantId']){
            $where['TenantId'] = \mvc::$cfg['RCAAPI']['tenantId'];
        }
        $id = $this->db->get('abpusers','Id',$where);
        //如果没有找到用户，默认返回admin用户
        if(!$id)
        {
            $where['userName'] = 'admin';
            $id = $this->db->get('abpusers','Id',$where);
        }
        return $id;
    }

    public function getAbpUserName($id)
    {   
        if(empty($id))
        {
            return '';
        }
        $name = $this->db->get('abpusers','userName',['Id'=>$id]);
        return $name;
    }

}