<?php

namespace common\models;

use common\helpers\user\Info;
use Yii;
use common\libs\logging\operate\valueType\Config as ValueTypeConfig;

/**
 * This is the model class for table "{{%USER_INFO}}".
 *
 * @property string $ID
 * @property string $USER_ID 会员ID
 * @property string $USER_NAME 会员名
 * @property string $ZC_PV 注册单PV
 * @property string $CON_UID 安置人ID
 * @property string $REC_UID 实际推荐人ID
 * @property string $REC_UID_ACTUAL 推荐人ID
 * @property int $CON_NUM 下级节点数量
 * @property int $REC_NUM 开拓会员数量
 * @property int $NETWORK_DEEP 安置网络深度
 * @property int $RELATION_DEEP 开拓网络深度
 * @property string $SYSTEM_ID 体系ID
 * @property int $IS_SYSTEM_LEADER 是否体系领导人
 * @property int $IS_TEAM 是否点位合作
 * @property int $IS_BIND 是否点位绑定
 * @property int $IS_TEAM_MAIN 是否点位合作主点
 * @property int $IS_BIND_MAIN 是否点位绑定主点
 * @property int $IS_AUTO_WITHDRAW 是否开启自动提现
 * @property int $CLOSE_LOGIN 关闭结算系统登录
 * @property string $REG_TYPE 注册类型
 * @property string $SHOULD_REG_TYPE 应注册类型
 * @property string $REG_NAME 注册名称
 * @property string $CREDIT_CODE 信用代码
 * @property string $PREMISES 经营场所
 * @property string $LEGAL_PERSON 法人
 * @property int $REG_EXPIRES 注册有效期
 * @property int $STORE_TYPE 店铺类型
 * @property string $INVOICE_BALANCE 发票余额
 * @property string $HIGHEST_EMP_LV 历史最高聘级
 * @property int $CREATED_AT 创建时间
 * @property int $UPDATED_AT 更新时间
 * @property int $CLOSE_LOGIN_AT 禁止登录时间
 * @property int $PULLED_AT 站内信拉取时间
 * @property int $DELETED 是否删除
 * @property int $DELETED_AT 删除时间
 * @property int $ALLOW_TRANSFER 开启转账功能
 * @property int $ALLOW_RECONSUME_SMS 开启复销短信提醒
 * @property int $ALLOW_RECONSUME_SMS_TO 开启复销短信提醒有效期
 * @property int $HIGHEST_EMP_LV_PERIOD 首次达到最高聘级期数
 * @property int $IS_GROUP_LEADER 是否团队领导人
 * @property int $GROUP_LEADER_AT 成为团队领导人时间
 * @property string $TRANSFER_PROP 单笔转账比例
 * @property int $LOGIN_NUMS 登录次数
 * @property int $FAIL_NUMS 登录失败次数
 * @property string $LAST_LOGIN_IP 上次登录IP
 * @property int $LAST_LOGIN_AT 上次登录时间
 * @property string $SHOW_EMP_LV 展示聘级
 * @property string $ZC_AMOUNT 注册单报单金额
 */
class UserInfo extends \common\components\ActiveRecord
{
    const STORE_TYPE_NORMAL = 0;    // 一般会员无店铺标识
    const STORE_TYPE_GENERAL = 1;   // 店铺
    const STORE_TYPE_IMAGE = 2;     // 形象店
    const STORE_TYPE_SERVICE = 3;   // 服务点、具有报单功能的会员
    const STORE_TYPE_AREA = 4;   // 区级店

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%USER_INFO}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['USER_ID', 'USER_NAME', 'CON_UID', 'REC_UID', 'CREATED_AT'], 'required'],
            [['ZC_PV', 'INVOICE_BALANCE', 'TRANSFER_PROP', 'ZC_AMOUNT'], 'number'],
            [['CON_NUM', 'REC_NUM', 'NETWORK_DEEP', 'RELATION_DEEP', 'IS_SYSTEM_LEADER', 'IS_TEAM', 'IS_BIND', 'IS_TEAM_MAIN', 'IS_BIND_MAIN', 'IS_AUTO_WITHDRAW', 'CLOSE_LOGIN', 'REG_EXPIRES', 'STORE_TYPE', 'CREATED_AT', 'UPDATED_AT', 'CLOSE_LOGIN_AT', 'PULLED_AT', 'DELETED', 'DELETED_AT', 'ALLOW_TRANSFER', 'HIGHEST_EMP_LV_PERIOD', 'IS_GROUP_LEADER', 'GROUP_LEADER_AT', 'ALLOW_RECONSUME_SMS', 'ALLOW_RECONSUME_SMS_TO', 'LOGIN_NUMS', 'FAIL_NUMS', 'LAST_LOGIN_AT'], 'integer'],
            [['ID','USER_ID', 'CON_UID', 'REC_UID', 'SYSTEM_ID', 'REG_TYPE', 'SHOULD_REG_TYPE', 'HIGHEST_EMP_LV', 'SHOW_EMP_LV'], 'string', 'max' => 32],
            [['USER_NAME', 'LAST_LOGIN_IP'], 'string', 'max' => 16],
            [['REG_NAME', 'CREDIT_CODE', 'PREMISES', 'LEGAL_PERSON'], 'string', 'max' => 255],
            [['USER_ID'], 'unique'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
            'USER_ID' => '会员ID',
            'USER_NAME' => '会员名',
            'ZC_PV' => '注册单PV',
            'CON_UID' => '接点人ID',
            'REC_UID' => '推荐人ID',
            'CON_NUM' => '下级节点数量',
            'REC_NUM' => '开拓会员数量',
            'NETWORK_DEEP' => '安置网络深度',
            'RELATION_DEEP' => '开拓网络深度',
            'SYSTEM_ID' => '体系ID',
            'IS_SYSTEM_LEADER' => '是否体系领导人',
            'IS_TEAM' => '是否点位合作',
            'IS_BIND' => '是否点位绑定',
            'IS_TEAM_MAIN' => '是否点位合作主点',
            'IS_BIND_MAIN' => '是否点位绑定主点',
            'IS_AUTO_WITHDRAW' => '是否开启自动提现',
            'CLOSE_LOGIN' => '关闭结算系统登录',
            'REG_TYPE' => '注册类型',
            'SHOULD_REG_TYPE' => '应注册类型',
            'REG_NAME' => '注册名称',
            'CREDIT_CODE' => '信用代码',
            'PREMISES' => '经营场所',
            'LEGAL_PERSON' => '法人',
            'REG_EXPIRES' => '注册有效期',
            'STORE_TYPE' => '店铺类型',
            'INVOICE_BALANCE' => '发票余额',
            'HIGHEST_EMP_LV' => '历史最高聘级',
            'CREATED_AT' => '创建时间',
            'UPDATED_AT' => '更新时间',
            'CLOSE_LOGIN_AT' => '禁止登录时间',
            'PULLED_AT' => '站内信拉取时间',
            'DELETED' => '是否删除',
            'DELETED_AT' => '删除时间',
            'ALLOW_TRANSFER' => '开启转账功能',
            'ALLOW_RECONSUME_SMS' => '开启复销短信提醒',
            'ALLOW_RECONSUME_SMS_TO' => '开启复销短信提醒有效期',
            'HIGHEST_EMP_LV_PERIOD' => '首次达到最高聘级期数',
            'IS_GROUP_LEADER' => '是否团队领导人',
            'GROUP_LEADER_AT' => '团队领导人时间',
            'TRANSFER_PROP' => '单笔转账比例',
            'LOGIN_NUMS' => '登录次数',
            'FAIL_NUMS' => '登录失败次数',
            'LAST_LOGIN_IP' => '上次登录IP',
            'LAST_LOGIN_AT' => '上次登录时间',
            'SHOW_EMP_LV' => '展示聘级',
            'ZC_AMOUNT' => '注册单报单金额',
        ];
    }

    /**
     * 删除会员
     * @param $userId
     */
    public static function deleteUser($userId){
        static::deleteAll('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
        UserNetwork::deleteAll('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
        UserRelation::deleteAll('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
        UserBonus::deleteAll('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
        UserPerf::deleteAll('USER_ID=:USER_ID', [':USER_ID'=>$userId]);
    }

    /**
     * 获取会员接点人推荐人
     * @param $userId
     * @return array|null
     */
    public static function getNetByUserId($userId){
        return static::findOneAsArray('USER_ID=:USER_ID', [':USER_ID' => $userId], 'CON_UID,REC_UID');
    }

    /**
     * 操作日志记录条件
     * @return array
     */
    public function attrLabelsWithLogType(){
        return [
            'USER_ID' => '会员ID',
            'USER_NAME' => '会员名',
            'ZC_PV' => '注册单PV',
            'CON_UID' => [
                'label' => '接点人编号',
                'type' => function($data){
                    $value = $data['value'];
                    return Info::getUserNameByUserId($value);
                },
            ],
            'REC_UID' => [
                'label' => '接点人编号',
                'type' => function($data){
                    $value = $data['value'];
                    return Info::getUserNameByUserId($value);
                },
            ],
            'CON_NUM' => '下级节点数量',
            'REC_NUM' => '开拓会员数量',
            'NETWORK_DEEP' => '安置网络深度',
            'RELATION_DEEP' => '开拓网络深度',
            'SYSTEM_ID' => '体系ID',
            'IS_SYSTEM_LEADER' => '是否体系领导人',
            'IS_TEAM' => '是否点位合作',
            'IS_BIND' => '是否点位绑定',
            'IS_TEAM_MAIN' => '是否点位合作主点',
            'IS_BIND_MAIN' => '是否点位绑定主点',
            'IS_AUTO_WITHDRAW' => [
                'label' => '是否开启自动提现',
                'type' => ValueTypeConfig::YES_NO_TYPE,
            ],
            'CLOSE_LOGIN' => '关闭结算系统登录',
            'REG_TYPE' => '注册类型',
            'SHOULD_REG_TYPE' => '应注册类型',
            'REG_NAME' => '注册名称',
            'CREDIT_CODE' => '信用代码',
            'PREMISES' => '经营场所',
            'LEGAL_PERSON' => '法人',
            'REG_EXPIRES' => '注册有效期',
            'STORE_TYPE' => '店铺类型',
            'INVOICE_BALANCE' => '发票余额',
            'HIGHEST_EMP_LV' => '历史最高聘级',
            'CREATED_AT' => '创建时间',
            'UPDATED_AT' => '更新时间',
            'CLOSE_LOGIN_AT' => '禁止登录时间',
            'PULLED_AT' => '站内信拉取时间',
            'DELETED' => '是否删除',
            'DELETED_AT' => '删除时间',
            'ALLOW_TRANSFER' => [
                'label' => '开启转账功能',
                'type' => ValueTypeConfig::YES_NO_TYPE,
            ],
            'ALLOW_RECONSUME_SMS' => [
                'label' => '开启复销短信提醒',
                'type' => ValueTypeConfig::YES_NO_TYPE,
            ],
            'ALLOW_RECONSUME_SMS_TO' => [
                'label' => '开启复销短信提醒有效期',
                'type' => ValueTypeConfig::DATE_TYPE,
            ],
            'HIGHEST_EMP_LV_PERIOD' => '首次达到最高聘级期数',
            'IS_GROUP_LEADER' => [
                'label' => '是否团队领导人',
                'type' => ValueTypeConfig::YES_NO_TYPE,
            ],
            'GROUP_LEADER_AT' => [
                'label' => '团队领导人时间',
                'type' => ValueTypeConfig::DATE_TIME_TYPE,
            ],
            'TRANSFER_PROP' => '单笔转账比例',
            'SHOW_EMP_LV' => [
                'label' => '前台显示聘级',
                'type' => ValueTypeConfig::EMP_LV_TYPE,
            ],
        ];
    }

    /**
     * 查询安置网的会员
     * @param $userId
     * @return array|null
     */
    public static function getPlacementChildren($userId): ?array
    {
        return static::findAllAsArray('REC_UID=:REC_UID', [':REC_UID' => $userId], 'USER_ID,USER_NAME');
    }

    public function getRecUserName()
    {
        return $this->hasOne(UserInfo::class, ['USER_ID' => 'REC_UID']);
    }

    public function getRecRealName()
    {
        return $this->hasOne(User::class, ['ID' => 'REC_UID']);
    }

    public function getConUserName()
    {
        return $this->hasOne(UserInfo::class, ['USER_ID' => 'CON_UID']);
    }

    public function getConRealName()
    {
        return $this->hasOne(User::class, ['ID' => 'CON_UID']);
    }
}
