
package com.tmerclub.cloud.common.response;

/**
 * @author tmerclub
 * @date 2020/7/9
 */
public enum ResponseEnum {

    /**
     * ok
     */
    OK("00000", "ok"),

    /**
     * 用于直接显示提示用户的错误，内容由输入内容决定
     */
    SHOW_FAIL("A00001", ""),

    /**
     * 方法参数没有校验，内容由输入内容决定
     */
    METHOD_ARGUMENT_NOT_VALID("A00002", ""),

    /**
     * 无法读取获取请求参数
     */
    HTTP_MESSAGE_NOT_READABLE("A00003", "请求参数格式有误"),

    /**
     * 未授权
     */
    UNAUTHORIZED("A00004", "Unauthorized"),

    /**
     * 服务器出了点小差
     */
    EXCEPTION("A00005", "服务器出了点小差"),

    /**
     * 验证码有误
     */
    VERIFICATION_CODE_ERROR("A00006", "验证码有误或已过期"),

    /**
     * 数据异常
     */
    DATA_ERROR("A00007", "数据异常，请刷新后重新操作"),

    /**
     * 一些需要登录的接口，而实际上因为前端无法知道token是否已过期，导致token已失效时，
     * 应该返回一个状态码，告诉前端token已经失效了，及时清理
     */
    CLEAN_TOKEN("A00008", "clean token"),

    /**
     * 刷新token已过期
     */
    REFRESH_TOKEN_EXIST("A00009", "refresh token exist"),

    /**
     * 数据不完整
     */
    DATA_INCOMPLETE("A00010", "数据不完整"),

    /**
     * 有敏感词
     */
    SENSITIVE_WORD("A00011", "存在敏感词，请重新输入"),

    /**
     * TempUid异常
     * 一般不会出现这个异常，出现这个异常会有两种已知可能
     * 1. 一种是旧的tempUid
     * 2. 一种是同域名的localstorage 有个也叫tempUid的存储覆盖了（有的人测试环境和正式环境放在同一个域名不同子目录下）
     * 如果前端看到返回了这个异常，为了让用户能够顺利登录，需要重新获取一遍code，重新获取tempUid
     */
    TEMP_UID_ERROR("A00012", "TempUid Error"),

    /**
     * 01开头代表商品
     * 商品已下架，返回特殊的状态码，用于渲染商品下架的页面
     */
    SPU_NOT_EXIST("A01000", "商品不存在"),

    /**
     * 02开头代表购物车
     */
    SHOP_CART_NOT_EXIST("A02000", "商品已下架"),

    /**
     * 03开头代表订单
     */
    ORDER_NOT_EXIST("A03000", "订单不存在"),

    /**
     * 订单不支持该配送方式
     */
    ORDER_DELIVERY_NOT_SUPPORTED("A03001", "The delivery method is not supported"),

    /**
     * 请勿重复提交订单，
     * 1.当前端遇到该异常时，说明前端防多次点击没做好
     * 2.提示用户 订单已发生改变，请勿重复下单
     */
    REPEAT_ORDER("A03002", "please don't repeat order"),

    /**
     * 库存不足，body会具体返回那个skuid的库存不足，后台通过skuId知道哪个商品库存不足，前端不需要判断
     */
    NOT_STOCK("A03010", "not stock"),

    /**
     * 积分不足，用户拥有的积分小于购买商品所需的积分(积分订单使用)
     */
    NOT_SCORE("A03020", "not score"),

    /**
     * 提交订单时判断商品下架
     */
    SPU_STATUS_ERROR("A03030", "商品已下架"),

    /**
     * 04 开头代表注册登录之类的异常状态
     * 社交账号未绑定，当前端看到该异常时，应该在合适的时间（比如在购买的时候跳）根据社交账号的类型，跳转到绑定系统账号的页面
     */
    SOCIAL_ACCOUNT_NOT_BIND("A04001", "social account not bind"),

    /**
     * 该社交账号被其他用户绑定了，如果返回这个状态码，前端应该提示用户解绑已经绑定的账号重新绑定
     */
    SOCIAL_ACCOUNT_BIND_BY_OTHER("A04002", "social account bind by other"),

    /**
     * 为了避免定时任务过慢，而商品活动实际已过期时，获取活动时异常信息用特殊的状态码返回，防止服务渲染出现错误
     */
    ACTIVITY_END("A05001", "activity end"),

    /**
     * 存在未完成订单不能注销
     */
    DESTROY_USER_FAIL("A06001", "您的账户当前有未完成的订单，请待所有订单完成后再注销账户"),

    /**
     * 用户收货地址超过配送范围
     */
    DELIVERY_OVER("A07001", "当前区域不支持配送"),

    /**
     * 该提货码，没有对应的订单
     */
    STATION_NULL("A08001", "该提货码，没有对应的订单");

    private final String code;

    private final String msg;

    public String value() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    ResponseEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "ResponseEnum{" + "code='" + code + '\'' + ", msg='" + msg + '\'' + "} " + super.toString();
    }

}
