<?php

class wxTxlAction extends baseAction
{
    /**
     * @method 微信通讯录页
     * @author hongzhang
     * @copyright 2026-05-20
     */
    function index(){
        // LibFc::checkDlRule('DL21', true);
        LibTpl::Set('title', '微信通讯录');
        LibTpl::Put();
    }

    /**
     * @method 微信通讯录列表
     * @author hongzhang
     * @copyright 2026-05-20
     */
    function list(){
        // LibFc::checkDlRule('DL21', true);
        $uid = $_SESSION['_userid'];
        $params = mvc::$URL_PARAMS;
        $b2cBase = new B2cBase();
        $table = 'wx_user wu1
        left join wx_user_address  wua on wua_mwu_id = wu1.wu_id AND wua_status = 1
        left join wx_user wu2 on wua_wu_id = wu2.wu_id
        left join ypdb_write.yp_user ypu on wu2.wu_uid = ypu.u_id
        left join yp_crm.crm_customer ctr on wu2.wu_uid = ctr.ctr_uid';
        $where = '';
        if(empty($uid)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'登录信息已失效，请重新登录']);
        }
        foreach ($params as $field => $val) {
            if($val == '') continue;
            switch ($field) {
                case 'unbinded':
                    if(intval($val) === 1){
                        $where .= ' AND wu2.wu_uid = 0';
                    }
                    break;
                case 'mobile':
                    $val = LibFc::Escape($val);
                    $where .= sprintf(" AND (ypu.u_name  LIKE '%%%s%%' OR wua.wua_mobiles LIKE '%%%s%%')", $val, $val);
                    break;
                case 'nickname':
                    $val = LibFc::Escape($val);
                    $where .= sprintf(" AND (wu2.wu_nickname LIKE '%%%s%%' OR wua.wua_rename LIKE '%%%s%%' )", $val, $val);
                    break;
            }
        }
        $fieldArr = [
            'wua.wua_id',
            'wua.wua_wu_id',
            'wua.wua_rename',
            'wua.wua_mobiles',
            'wu2.wu_id',
            'wu2.wu_uid',
            'wu2.wu_nickname',
            'wu2.wu_headimg',
            'wu2.wu_province',
            'wu2.wu_city',
            'wua.wua_info',
            'wua.wua_by',
            'wua.wua_atime',
            'wua.wua_autosend',
            'ypu.u_id',
            'ypu.u_name',
            'ypu.u_nickname',
            'ypu.u_email',
            'ypu.u_real_name',
            'ypu.u_mobile',
            'ypu.u_logo',
            'ctr.ctr_id',
            'ctr.ctr_comname',
        ];
        $where .= sprintf(' AND wu1.wu_uid = %d AND wu1.wu_isaccout = 1 AND wu2.wu_id > 0 AND wua.wua_mwu_id <> wua.wua_wu_id order by wu2.wu_nickname asc', $uid);
        $res = $b2cBase->get($table, $fieldArr, $where);
        // 获取本用户的微信信息
        $wxUserInfo = $b2cBase->get('
            wx_user wu
            left join wx_user_address wua on wu.wu_id = wua.wua_wu_id
            left join ypdb_write.yp_user ypu on wu.wu_uid = ypu.u_id
            left join yp_crm.crm_customer ctr on wu.wu_uid = ctr.ctr_uid
        ', ['*'], sprintf(' AND wu_uid = %d AND wu_isaccout = 1', $uid));
        $wxUserInfo = $wxUserInfo['data'][0] ?? [];
        $wxUserInfo['wua_autosend'] = intval($wxUserInfo['wua_autosend']) === 1 ? 1 : -1;
        $wxUserInfo['detail_info'] = array_merge(json_decode($wxUserInfo['wua_info'], true) ?? [], [
            'mobile' => $wxUserInfo['u_mobile'] ?? '',
            'province' => $wxUserInfo['wu_province'] ?? '',
            'city' => $wxUserInfo['wu_city'] ?? '',
        ]);
        $wxUserInfo['ypu_info'] = [
            'u_id' => intval($wxUserInfo['u_id']),
            'u_name' => trim($wxUserInfo['u_name']),
            'u_nickname' => trim($wxUserInfo['u_nickname']),
            'u_email' => trim($wxUserInfo['u_email']),
            'u_real_name' => trim($wxUserInfo['u_real_name']),
            'u_mobile' => trim($wxUserInfo['u_mobile']),
            'u_logo' => trim($wxUserInfo['u_logo']),
            'ctr_comname' => trim($wxUserInfo['ctr_comname']),
        ];



        $returnData = [];
        if(!empty($res['data'])){
            foreach ($res['data'] as $row) {
                $displayName = trim($row['wua_rename']) ?: (trim($row['wu_nickname']) ?: '未设置昵称');
                $detailInfo  = json_decode($row['wua_info'], true);
                $initial = $row['wua_rename']? $detailInfo['remarkPyInitial'] : $detailInfo['pyInitial'] ;
                $initial = !empty($initial) ? substr($initial, 0, 1) : '#';
                if(!preg_match('/[A-Z]/', $initial)){
                    $initial = '#';
                }
                $detailInfo = array_merge($detailInfo,[
                    'mobile' => $row['wua_mobiles'],
                    'province' => $row['wu_province'],
                    'city' => $row['wu_city'],
                ]);
                $ypUserInfo = [];
                if(!empty($row['u_id'])){
                    $ypUserInfo = [
                        'u_id' => intval($row['u_id']),
                        'u_name' => trim($row['u_name']),
                        'u_nickname' => trim($row['u_nickname']),
                        'u_email' => trim($row['u_email']),
                        'u_real_name' => trim($row['u_real_name']),
                        'u_mobile' => trim($row['u_mobile']),
                        'u_logo' => trim($row['u_logo']),
                        'ctr_comname' => trim($row['ctr_comname']),
                    ];
                }
                $returnData[$row['wua_wu_id']] = [
                    'ctr_id' => intval($row['ctr_id']),
                    'ctr_comname' => trim($row['ctr_comname']),
                    'wua_id' => intval($row['wua_id']),
                    'wu_id' => intval($row['wua_wu_id']),
                    'wu_nickname' => trim($row['wu_nickname']) ?: '未设置昵称',
                    'wu_headimg' => trim($row['wu_headimg']),
                    'wu_rename' => trim($row['wua_rename']),
                    'display_name' => $displayName,
                    'mobile' => trim($row['wua_mobiles']),
                    'wu_uid' => intval($row['wu_uid']),
                    'wua_autosend' => intval($row['wua_autosend']) === 1 ? 1 : -1,
                    'ypu_name' => trim($row['u_name']) ?: '未匹配宜配账号数据',
                    'is_bind' => !empty($row['wu_uid']) ? 1 : 0,
                    'initial' => $initial,
                    'detail_info' => $detailInfo,
                    'ypu_info' => $ypUserInfo,
                ];
            }
        }
        LibFc::ajaxJsonEncode(['status'=>true,'data'=>array_values($returnData),'wx_user'=>$wxUserInfo]);
    }

    /**
     * @method 修改联系人是否允许推送
     * @author hongzhang
     * @copyright 2026-05-22
     */
    function updateAutoSend(){
        $uid = intval($_SESSION['_userid']);
        $params = mvc::$URL_PARAMS;
        $wuaIdsRaw = trim($params['wua_ids']);
        $autosend = intval($params['autosend']);
        if(empty($uid) || empty($wuaIdsRaw) || !in_array($autosend, [1, -1], true)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请传入正确的推送设置参数']);
        }
        $wuaIds = array_values(array_unique(array_filter(array_map('intval', explode(',', $wuaIdsRaw)))));
        if(empty($wuaIds)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请选择需要设置的联系人']);
        }
        $b2cBase = new B2cBase();
        $ownerRes = $b2cBase->get('wx_user', ['wu_id'], sprintf(' AND wu_uid = %d AND wu_isaccout = 1', $uid));
        if(empty($ownerRes['data'][0]['wu_id'])){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'未找到当前微信主账号']);
        }
        $mainWuId = intval($ownerRes['data'][0]['wu_id']);
        $where = sprintf(' AND wua_mwu_id = %d AND wua_id in (%s)', $mainWuId, implode(',', $wuaIds));
        $b2cBase->set('wx_user_address', ['wua_autosend' => $autosend], $where);
        LibFc::ajaxJsonEncode([
            'status'=>true,
            'data'=> $autosend === 1 ? '已设为可推送' : '已设为禁止推送'
        ]);
    }

    /**
     * @method 通讯录账号手动绑定宜配账号
     * @author hongzhang
     * @copyright 2026-05-20
     */
    function bindYP(){
        $params = mvc::$URL_PARAMS;
        $bindKey = trim($params['bindKey']);
        $wu_id = intval($params['wu_id']);
        if(empty($bindKey) || empty($wu_id)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请填写绑定账号信息']);
        }
        $b2cBase = new B2cBase();
        $bindKey = LibFc::Escape($bindKey);
        // 先根据bindKey查找是否存在匹配的宜配账号（bindKey为电话或者宜配用户名）
        $existRes = $b2cBase->get('ypdb_write.yp_user', ['u_id'],sprintf(" AND (u_name = '%s' OR u_mobile = '%s')", $bindKey, $bindKey));
        if(empty($existRes['data'])){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'未匹配到宜配账号']);
        }
        $ypUserId = intval($existRes['data'][0]['u_id']);
        $b2cBase->set('wx_user',['wu_uid'=>$ypUserId],sprintf(" AND wu_id = %d",$wu_id));
        LibFc::ajaxJsonEncode(['status'=>true,'data'=>'绑定成功']);
    }

    /**
     * @method 修改联系人手机号信息
     * @author hongzhang
     * @copyright 2026-05-20
     */
    function updateMobile(){
        $params = mvc::$URL_PARAMS;
        $mobile = trim($params['mobile']);
        $wu_id = intval($params['wu_id']);
        $wua_id = intval($params['wua_id']);
        if(empty($mobile) || empty($wu_id) || empty($wua_id)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请填写手机号']);
        }
        if(!preg_match('/^1[3-9]\d{9}$/', $mobile)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请输入正确的手机号格式']);
        }
        $b2cBase = new B2cBase();
        $b2cBase->set('wx_user',['wu_mobile'=>$mobile],sprintf(" AND wu_id = %d",$wu_id));
        $b2cBase->set('wx_user_address',['wua_mobiles'=>$mobile],sprintf(" AND wua_id = %d",$wua_id));

        // 输入手机号之后  自动绑定手机号对应的宜配账号
        $existRes = $b2cBase->get('ypdb_write.yp_user', ['u_id'],sprintf(" AND u_mobile = '%s'", $mobile));
        if(!empty($existRes['data'])){
            $ypUserId = intval($existRes['data'][0]['u_id']);
            $b2cBase->set('wx_user',['wu_uid'=>$ypUserId],sprintf(" AND wu_id = %d",$wu_id));
        }
        LibFc::ajaxJsonEncode(['status'=>true,'data'=>'修改成功']);
    }

     /**
     * @method 添加微信好友记录
     * @author hongzhang
     * @copyright 2026-06-11
     */
    function addFriend(){
        $uid = intval($_SESSION['_userid']);
        $params = mvc::$URL_PARAMS;
        $page = max(1, intval($params['page']));
        $perPage = 20;
        $b2cBase = new B2cBase();
        $table = 'wx_user_newfriend
        left join ypdb_write.yp_user on wun_to_uid = yp_user.u_id';
        if(empty($uid)){
            LibFc::ajaxJsonEncode(['status'=>false,'data'=>'登录信息已失效，请重新登录']);
        }
        $fieldArr = ['wun_mobile','wun_to_uid','wun_atime','wun_verify','wun_info','wun_reason','u_name'];
        $where = sprintf(' AND wun_from_uid = %d', $uid);
        $countRes = $b2cBase->get($table, ['count(*) as counts'], $where, true);
        $total = intval($countRes['data']['counts']);
        $friendList = [];
        if($total > 0){
            $listWhere = sprintf('%s ORDER BY wun_atime DESC limit %d,%d', $where, ($page-1)*$perPage, $perPage);
            $res = $b2cBase->get($table, $fieldArr, $listWhere);
            if(!empty($res['data'])){
                $friendList = $res['data'];
            }
        }
        LibTpl::Set('friendList', $friendList);
        LibTpl::Set('pageMsg', LibPage::Show($total, $perPage, true));
        LibTpl::Set('title', '添加微信好友');
        LibTpl::Put();
    }
}
