<?php

namespace backendApi\modules\v1\models;

use common\components\ActiveRecord;
use common\libs\logging\operate\valueType\Config as ValueTypeConfig;

/**
 * This is the model class for table "{{%ADMIN}}".
 *
 * @property string $ID
 * @property string $ADMIN_NAME 用户名
 * @property string $REAL_NAME 会员姓名
 * @property string $REMARK 备注
 * @property string $ROLE_ID 角色ID
 * @property int $IS_ENABLE 是否启用
 * @property string $AUTH_KEY 认证KEY
 * @property string $PASSWORD_HASH 密码
 * @property string $PASSWORD_RESET_TOKEN 重设密码TOKEN
 * @property int $DONT_DEL 不可删除
 * @property int $IS_DEL 是否删除
 * @property int $LOGIN_NUMS 登录次数
 * @property int $FAIL_NUMS 登录失败次数
 * @property string $LAST_LOGIN_IP 上次登录IP
 * @property int $LAST_LOGIN_AT 上次登录时间
 * @property string $BIND_IP 绑定IP
 * @property string $CREATE_ADMIN 创建管理员
 * @property string $UPDATE_ADMIN 更新管理员
 * @property int $CREATED_AT 创建时间
 * @property int $UPDATED_AT 更新时间
 * @property int $DELETED_AT 删除时间
 * @property int $IS_MODIFY_PASSWORD 是否修改密码
 * @property string $LANG 语言标识
 */
class Admin extends ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%ADMIN}}';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['ADMIN_NAME', 'REAL_NAME', 'ROLE_ID', 'PASSWORD_HASH', 'CREATE_ADMIN', 'CREATED_AT'], 'required'],
            [['IS_ENABLE', 'DONT_DEL', 'IS_DEL', 'LOGIN_NUMS', 'FAIL_NUMS', 'LAST_LOGIN_AT', 'CREATED_AT', 'UPDATED_AT', 'DELETED_AT', 'IS_MODIFY_PASSWORD'], 'integer'],
            [['ID', 'ROLE_ID', 'CREATE_ADMIN', 'UPDATE_ADMIN'], 'string', 'max' => 32],
            [['ADMIN_NAME', 'REMARK', 'AUTH_KEY', 'PASSWORD_HASH', 'PASSWORD_RESET_TOKEN'], 'string', 'max' => 255],
            [['REAL_NAME'], 'string', 'max' => 128],
            [['LAST_LOGIN_IP'], 'string', 'max' => 16],
            [['BIND_IP'], 'string', 'max' => 4000],
            [['ADMIN_NAME'], 'unique'],
            [['ID'], 'unique'],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
            'ADMIN_NAME' => '用户名',
            'REAL_NAME' => '会员姓名',
            'REMARK' => '备注',
            'ROLE_ID' => '角色ID',
            'IS_ENABLE' => '是否启用',
            'AUTH_KEY' => '认证KEY',
            'PASSWORD_HASH' => '密码',
            'PASSWORD_RESET_TOKEN' => '重设密码TOKEN',
            'DONT_DEL' => '不可删除',
            'IS_DEL' => '是否删除',
            'LOGIN_NUMS' => '登录次数',
            'FAIL_NUMS' => '登录失败次数',
            'LAST_LOGIN_IP' => '上次登录IP',
            'LAST_LOGIN_AT' => '上次登录时间',
            'BIND_IP' => '绑定IP',
            'CREATE_ADMIN' => '创建管理员',
            'UPDATE_ADMIN' => '更新管理员',
            'CREATED_AT' => '创建时间',
            'UPDATED_AT' => '更新时间',
            'DELETED_AT' => '删除时间',
            'IS_MODIFY_PASSWORD' => '是否修改密码',
            'LANG' => '语言标识',
        ];
    }

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return bool if password provided is valid for current user
     */
    public function validatePassword($password) {
        return \Yii::$app->security->validatePassword($password, $this->PASSWORD_HASH);
    }

    /**
     * 根据用户名查找
     * @param $username
     * @return array|null|\yii\db\ActiveRecord
     */
    public static function findByUsername($username){
        $row = static::find()->selectNoText()->where('ADMIN_NAME=:ADMIN_NAME', [':ADMIN_NAME'=>trim($username)])->one();
        return $row;
    }

    /**
     * 获取ID
     * @param $adminName
     * @return string|null
     */
    public static function getIdByAdminName($adminName) {
        $data = self::findOneAsArray('ADMIN_NAME=:ADMIN_NAME', [':ADMIN_NAME' => $adminName], 'ID');
        return $data ? $data['ID'] : null;
    }

    /**
     * 获取管理员名通过ID
     * @param $id
     * @return string|null
     */
    public static function getAdminNameById($id){
        $data = self::findOneAsArray('ID=:ID', [':ID' => $id], 'ADMIN_NAME');
        return $data ? $data['ADMIN_NAME'] : null;
    }

    public static function getRoleIdById($id){
        $data = self::findOneAsArray('ID=:ID', [':ID' => $id], 'ROLE_ID');
        return $data ? $data['ROLE_ID'] : null;
    }

    /**
     * 操作日志记录条件
     * @return array
     */
    public function attrLabelsWithLogType(){
        return [
            'ADMIN_NAME' => '用户名',
            'REAL_NAME' => '会员姓名',
//            'REMARK' => '备注',
            'ROLE_ID' => [
                'label' => '角色名称',
                'type' => function($data){
                    $value = $data['value'] ?? '';
                    $result = AdminRole::findOneAsArray('ID=:ID', [':ID'=>$value], 'ROLE_NAME');
                    return !empty($result) ? $result['ROLE_NAME'] : '';
                },
            ],
            'IS_ENABLE' => [
                'label' => '是否启用',
                'type' => ValueTypeConfig::YES_NO_TYPE,
            ],
//            'BIND_IP' => '绑定IP',
//            'CREATE_ADMIN' => [
//                'label' => '创建人',
//                'type' => function($data){
//                    $value = isset($data['value']) ? $data['value'] : '';
//                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
//                    return !empty($result) ? $result['ADMIN_NAME'] : '';
//                },
//            ],
//            'UPDATE_ADMIN' => [
//                'label' => '更新人',
//                'type' => function($data){
//                    $value = isset($data['value']) ? $data['value'] : '';
//                    $result = Admin::findOneAsArray('ID=:ID', [':ID'=>$value], 'ADMIN_NAME');
//                    return !empty($result) ? $result['ADMIN_NAME'] : '';
//                },
//            ],
//            'CREATED_AT' => [
//                'label' => '创建时间',
//                'type' => ValueTypeConfig::DATE_TIME_TYPE,
//            ],
//            'UPDATED_AT' => [
//                'label' => '更新时间',
//                'type' => ValueTypeConfig::DATE_TIME_TYPE,
//            ],
//            'IS_MODIFY_PASSWORD' => [
//                'label' => '是否修改密码',
//                'type' => ValueTypeConfig::YES_NO_TYPE,
//            ],
        ];
    }
}
