import extend from '../utils/extend.js';
import request from './request.js';

/**
 * 结果键
 */
const resultKey = 'login_result';

/**
 * 信息键
 */
const infoKey = 'login_info';

/**
 * 记住键
 */
const rememberKey = 'login_remember';

/**
 * 用户类
 */
export default {
    /**
     * 从服务器获取
     * @param {object} opts 参数
     * @param {string} opts.url 访问地址
     * @param {string} opts.method 方法，合法值：get、post、put、delete，默认 get
     */
    async getByServer(opts) {
        let res = await request.sendToken({
            url: opts.url
        });
        if (res.success) {
            if (extend.isObject(res.data)) {
                this.set(res.data);
            }
        }
        return res;
    },

    /**
     * 获取用户对象
     */
    get() {
        let user = extend.readStorage(resultKey);
        return user;
    },

    /**
     * 设置用户对象
     * @param {object} user 用户对象
     * @returns {boolean} 设置成功标记
     */
    set(user) {
        if (extend.isObject(user)) {
            extend.addStorage(resultKey, user);
            return true;
        }
        return false;
    },

    /**
     * 获取登录信息
     */
    getLoginInfo() {
        let info = extend.readStorage(infoKey);
        return info;
    },

    /**
     * 获取登录信息
     */
    getRemember() {
        let info = extend.readStorage(rememberKey);
        return info;
    },

    /**
     * 设置登录信息
     * @param {object} info 登录信息
     * @param {string} info.username 登录账号
     * @param {string} info.password 登录密码
     * @returns {boolean} 设置成功标记
     */
    setLoginInfo(info) {
        if (extend.isObject(info)) {
            extend.addStorage(infoKey, info);
            return true;
        }
        return false;
    },

    /**
     * 设置登录信息
     * @param {object} info 登录信息
     * @param {string} info.username 登录账号
     * @param {string} info.password 登录密码
     * @returns {boolean} 设置成功标记
     */
    setRemember(info) {
        if (extend.isObject(info)) {
            extend.addStorage(rememberKey, info);
            return true;
        }
        return false;
    },

    /**
     * 清除用户信息缓存
     */
    clear() {
        extend.removeStorage(resultKey);
    },

    /**
     * 清除登录信息缓存
     */
    clearLoginInfo() {
        extend.removeStorage(infoKey);
    },

    /**
     * 清除登录信息缓存
     */
    clearRemember() {
        extend.removeStorage(rememberKey);
    }
}