package com.tanpu.feo.feojob.feign;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("CommonResp")
public class CommonResp<T> extends BaseRep<T> {

    public CommonResp() {
    }

    public static <T> CommonResp<T> success() {
        return success(null);
    }

    public static <T> CommonResp<T> success(T data) {
        return new CommonResp<>(STATUS_CODE_SUCCESS, FAILURE_MESSAGE_SUCCESS, data);
    }

    public static <T> CommonResp<T> error() {
        return new CommonResp<>(STATUS_CODE_FAILURE_DEFAULT, FAILURE_MESSAGE_DEFAULT, null);
    }

    public static <T> CommonResp<T> error(String msg) {
        CommonResp<T> error = error();
        error.setMessage(msg);
        return error;
    }


    public static <T> CommonResp<T> error(String code, String msg) {
        return new CommonResp(code, msg, null);
    }

    public static <T> CommonResp<T> error(String code, String msg, T t) {
        return new CommonResp(code, msg, t);
    }

    public CommonResp(String statusCode, String message, T attributes) {
        this.statusCode = statusCode;
        this.message = message;
        this.attributes = attributes;
    }

    @JsonIgnore
    public boolean isSuccess() {
        return STATUS_CODE_SUCCESS.equals(statusCode);
    }

    @JsonIgnore
    public boolean isNotSuccess() {
        return !isSuccess();
    }

    public static final String STATUS_CODE_SUCCESS = "0000";
    public static final String FAILURE_MESSAGE_SUCCESS = "成功";


    public static final String STATUS_CODE_UNKNOWN = "0010";
    public static final String FAILURE_MESSAGE_UNKNOWN = "未知错误";

    public static final String STATUS_CODE_INSUFFICIENT_PRIVILEGE = "0020";
    public static final String FAILURE_MESSAGE_INSUFFICIENT_PRIVILEGE = "权限不足";

    public static final String STATUS_CODE_DANGER_OPERATION = "0030";
    public static final String MESSAGE_CANNOT_OPERATE = "危险操作";

    public static final String STATUS_CODE_WRONG_SIGN = "0040";
    public static final String MESSAGE_WRONG_SIGN = "签名未通过";

    public static final String STATUS_CODE_FAILURE_DEFAULT = "9999";
    public static final String FAILURE_MESSAGE_DEFAULT = "处理失败";

    public static final String STATUS_CODE_NOT_LOGIN = "9000";
    public static final String MESSAGE_NOT_LOGIN = "未登录";
    public static final String STATUS_CODE_TOKEN_EXPIRE = "9001";
    public static final String MESSAGE_TOKEN_EXPIRE = "TOKEN失效";

    public static final String STATUS_CODE_APPVERSIONLOW_EXPIRE = "9002";
    public static final String MESSAGE_APPVERSIONLOW_EXPIRE = "App版本过低,请更新最新版本!";

    public static final String FREQ_ERROR_STATUS_CODE = "1000";
    public static final String FREQ_ERROR_MESSAGE = "请求处理中,请勿频繁操作!";

    public static final String NET_ERROR_STATUS_CODE = "1001";
    public static final String NET_ERROR_MESSAGE = "网络异常,请稍后重试";

    public static final String DATA_USED_STATUS_CODE = "1002";
    public static final String DATA_USED_ERROR_MESSAGE = "数据被已被引用,不可删除";

    public static final String ROOM_NOT_FOUND_STATUS_CODE = "1005";
    public static final String ROOM_NOT_FOUND_MESSAGE = "直播间找不到";

    public static final String ARTICLE_NOT_EXIST_STATUS_CODE = "1026";
    public static final String ARTICLE_NOT_EXIST_MESSAGE = "文章不存在";

    public static final String RISK_RZ_ERROR_STATUS_CODE = "1027";
    public static final String RISK_RZ_ERROR_MESSAGE = "用户评测流程异常";

    public static final String ARTICLE_ALREADY_EXIST_STATUS_CODE = "15001";
    public static final String ARTICLE_ALREADY_EXIST_MESSAGE = "文章已存在";

    public static final String ROOM_NOT_EXIST_STATUS_CODE = "2001";
    public static final String ROOM_NOT_EXIST_MESSAGE = "直播间不存在";

    public static final String MEMBER_NOT_EXIST_STATUS_CODE = "2002";
    public static final String MEMBER_NOT_EXIST_MESSAGE = "成员不存在";

    public static final String PARAMETER_INVALID_STATUS_CODE = "2003";
    public static final String PARAMETER_INVALID_MESSAGE = "参数错误";

    public static final String FILE_NOT_EXIST_STATUS_CODE = "2004";
    public static final String FILE_NOT_EXIST_MESSAGE = "文件不存在";

    public static final String USER_PHONE_EXIST_STATUS_CODE = "2005";
    public static final String USER_PHONE_EXIST_MESSAGE = "该手机号码已绑定其他微信,如非本人绑定,请联系客服: 021-65681889。";

    public static final String SMS_CODE_EXCEPTION_STATUS_CODE = "2006";
    public static final String SMS_CODE_EXCEPTION_MESSAGE = "短信验证码错误";

    public static final String TELPHONE_VALID_EXCEPTION_STATUS_CODE = "2007";
    public static final String TELPHONE_VALID_EXCEPTION_MESSAGE = "手机格式不正确";

    public static final String SMS_CODE_OVER_LIMIT_EXCEPTION_STATUS_CODE = "2008";
    public static final String SMS_CODE_OVER_LIMIT_EXCEPTION_MESSAGE = "短信发送过于频繁,请稍后再试";

    public static final String SMS_CODE_SEND_FAIL_EXCEPTION_STATUS_CODE = "2009";
    public static final String SMS_CODE_SEND_FAIL_EXCEPTION_MESSAGE = "短信发送失败";

    public static final String JIFEN_EXCEPTION_STATUS_CODE = "2010";
    public static final String JIFEN_EXCEPTION_MESSAGE = "积分不足";

    public static final String LOGIN_EXCEPTION_STATUS_CODE = "2012";
    public static final String LOGIN_EXCEPTION_MESSAGE = "账号或密码错误";

    public static final String LOGIN_PHONE_HAVABIND_EXCEPTION_STATUS_CODE = "2013";
    public static final String LOGIN_PHONE_HAVABIND_EXCEPTION_MESSAGE = "该手机号已绑定";

    public static final String USER_HAVABINDPHONE_EXCEPTION_STATUS_CODE = "2014";
    public static final String USER_HAVABINDPHONE_EXCEPTION_MESSAGE = "该用户已绑定手机号";

    public static final String USER_INVESTORRZ_EXCEPTION_STATUS_CODE = "2015";
    public static final String USER_INVESTORRZ_EXCEPTION_MESSAGE = "用户已进行过合格投资者认证说明";

    public static final String OBJECT_NOT_FOUND_EXCEPTION_STATUS_CODE = "2016";
    public static final String OBJECT_NOT_FOUND_EXCEPTION_MESSAGE = "对象不存在";

    public static final String USER_NOT_IFA_EXCEPTION_STATUS_CODE = "2017";
    public static final String USER_NOT_IFA__EXCEPTION_MESSAGE = "用户为非理财师用户";

    public static final String OBJECT_ALREADY_EXIST_EXCEPTION_STATUS_CODE = "2018";
    public static final String OBJECT_ALREADY_EXIST_EXCEPTION_MESSAGE = "对象已存在";

    public static final String ALREADY_FINANCIAL_PRACTITIONER_CODE = "2018";
    public static final String ALREADY_FINANCIAL_PRACTITIONER_MESSAGE = "您已经是{0},无需再次认证";

    public static final String APPLICATION_STATE_AUDITING_CODE = "2019";
    public static final String APPLICATION_STATE_AUDITING_MESSAGE = "您的申请正在审核中,请耐心等待";

    public static final String APPLICATION_STATE_PASS_CODE = "2020";
    public static final String APPLICATION_STATE_PASS_MESSAGE = "您的申请已通过";

    public static final String APPLICATION_STATE_REJECT_CODE = "2021";
    public static final String APPLICATION_STATE_REJECT_MESSAGE = "您的申请已被驳回";

    public static final String OBJECT_ALREADY_EXISTS_STATUS_CODE = "2022";
    public static final String OBJECT_ALREADY_EXISTS_STATUS_MESSAGE = "对象已存在";

    public static final String WECHAT_IN_USER_CODE = "2023";
    public static final String WECHAT_IN_USER_MESSAGE = "该微信已绑定其他手机号码,如非本人绑定,请联系客服: 021-65681889。";

    public static final String ZHIBO_APPOINTMENT_EXIST_STATUS_CODE = "3001";
    public static final String ZHIBO_APPOINTMENT_EXIST_MESSAGE = "已预约过直播";

    public static final String ERROR_CODE_CAN_NOT_BROADCAST = "3002";
    public static final String ERROR_MSG_CAN_NOT_BROADCAST = "不可转播";

    public static final String CHECK_PASSWORD_EXCEPTION_STATUS_CODE = "3003";
    public static final String CHECK_PASSWORD_EXCEPTION_MESSAGE = "进入直播间密码错误";

    public static final String ERROR_CODE_NOT_FOUND = "4004";
    public static final String ERROR_MSG_NOT_FOUND = "接口不可用";

    public static final String ERROR_FORWORDARTICLE_CODE = "4005";
    public static final String ERROR_FORWORDARTICLE_MESSAGE = "文章转载解析失败";

    public static final String ADDRESS_NOT_FOUND_CODE = "4006";
    public static final String ADDRESS_NOT_FOUND_MESSAGE = "联系地址未填写";

    public static final String MOBILE_INVALIDATE_CODE = "4007";
    public static final String MOBILE_INVALIDATE_MESSAGE = "手机号不正确";

    public static final String CARD_NO_INVALIDATE_CODE = "4008";
    public static final String CARD_NO_INVALIDATE_MESSAGE = "身份证号码不正确";

    public static final String ACCOUNT_INVALIDATE_CODE = "4009";
    public static final String ACCOUNT_NO_INVALIDATE_MESSAGE = "账号信息不正确";

    public static final String ALREADY_CERTIFIED_CODE= "4010";
    public static final String ALREADY_CERTIFIED_MESSAGE = "已实名认证";

    public static final String CARD_NO_IN_USER_CODE= "4011";
    public static final String CARD_NO_IN_USER_MESSAGE = "身份证号已经被使用";

    public static final String CERTIFY_FAIL_CODE = "4012";
    public static final String CERTIFY_FAIL_MESSAGE = "实名认证失败";

    public static final String USER_UNKNOWN_CODE = "4020";
    public static final String USER_UNKNOWN_MESSAGE = "用户不存在,请联系管理员添加";

    public static final String EXCEL_RESOLVE_FAIL_CODE = "4021";
    public static final String EXCEL_RESOLVE_FAIL_MESSAGE = "EXCEL文件解析失败";

    public static final String BUSINESS_CARD_UPLOAD_EXCEPTION_CODE = "4013";
    public static final String BUSINESS_CARD_UPLOAD_EXCEPTION_MESSAGE = "实名认证失败";


    /* 运营活动相关 start */
    public static final String ACTIVITY_NOT_FOUND_CODE = "4014";
    public static final String ACTIVITY_NOT_FOUND_MESSAGE = "活动未配置";

    public static final String ACTIVITY_NOT_STARTED_CODE = "4015";
    public static final String ACTIVITY_NOT_STARTED_MESSAGE = "活动未开始";

    public static final String ACTIVITY_HAVE_FINISHED_CODE = "4016";
    public static final String ACTIVITY_HAVE_FINISHED_MESSAGE = "活动已结束";


    /* 运营活动相关 end */

    /* 优惠券相关 start */
    public static final String COUPON_NOT_FOUND_CODE = "4017";
    public static final String COUPON_NOT_FOUND_MESSAGE = "优惠券不存在";

    public static final String COUPON_UNSHELVE_CODE = "4018";
    public static final String COUPON_UNSHELVE_MESSAGE = "优惠券已下架";

    public static final String COUPON_WAS_OUT_OF_STOCK_CODE = "4019";
    public static final String COUPON_WAS_OUT_OF_STOCK_MESSAGE = "优惠券已领完";

    public static final String COUPON_OVER_PER_USER_LIMIT_CODE = "4020";
    public static final String COUPON_OVER_PER_USER_LIMIT_MESSAGE = "优惠券领取达到上限";
    /* 优惠券相关 end */

    public static final String APPLE_PUBLICK_KEY_ERROR_CODE = "5001";
    public static final String APPLE_PUBLICK_KEY_ERROR_MESSAGE = "转换苹果公钥失败!";

    public static final String APPLE_TOKEN_EXPIRED_CODE = "5002";
    public static final String APPLE_TOKEN_EXPIRED_MESSAGE = "苹果token过期,请重试!";

    public static final String APPLE_VERIFY_FAIL_CODE = "5003";
    public static final String APPLE_VERIFY_FAIL_MESSAGE = "苹果登录校验失败!";

    public static final String PROCESS_CREATE_FAIL_CODE = "6000";
    public static final String PROCESS_CREATE_FAIL_MESSAGE = "流程创建失败!";

    public static final String PROCESS_HANGUP_FAIL_CODE = "6001";
    public static final String PROCESS_HANGUP_FAIL_MESSAGE = "此流程已经挂起,请联系系统管理员!";

    public static final String PROCESS_INSTANCE_NOT_EXIST_CODE = "6002";
    public static final String PROCESS_INSTANCE_NOT_EXIST_MESSAGE = "不存在运行的流程实例,请确认!";

    public static final String PROCESS_TASK_NOT_EXIST_CODE = "6003";
    public static final String PROCESS_TASK_NOT_EXIST_MESSAGE = "不存在此任务,请确认!";

    public static final String PROCESS_NEXT_STAP_ERROE_CODE = "6004";
    public static final String PROCESS_NEXT_STAP_ERROE_MESSAGE = "流程流转失败!";

    public static final String HOLDSHARES_NOT_ENOUGH_ERROE_CODE = "6005";
    public static final String HOLDSHARES_NOT_ENOUGH_ERROE_MESSAGE = "用户持仓份额小于赎回份额!";

    public static final String DOUBLERECORD_APPOINTMENT_ERROE_CODE = "6006";
    public static final String DOUBLERECORD_APPOINTMENT_ERROE_MESSAGE = "当前时间段不可预约!";

    public static final String ORDER_LOCK_ERROE_CODE = "6007";
    public static final String ORDER_LOCK_ERROE_MESSAGE = "用户正在修改订单,当前订单已锁定!";

    public static final String ORDER_PUBFUND_CREATE_IDCARD_ERROE_CODE = "6008";
    public static final String ORDER_PUBFUND_CREATE_IDCARD_ERROE_MESSAGE = "请先填写投资人身份证信息!";

    public static final String ORDER_DECODE_ERROE_CODE = "7001";
    public static final String ORDER_DECODE_ERROE_MESSAGE = "解码失败!";

    public static final String ILLEGAL_OPERATION_STATUS_ERROR_CODE = "9003";
    public static final String ILLEGAL_OPERATION_STATUS_ERROR_MESSAGE = "非法操作!";

    /** 内容检查不通过*/
    public static final String CONTENT_ILLEGAL = "7001";

    public static final String ORG_DEPARTMENT_CAN_NOT_BE_REMOVE_CODE = "8001";
    public static final String ORG_DEPARTMENT_CAN_NOT_BE_REMOVE_MESSAGE = "部门不允许被删除";

    public static final String ORG_DEPARTMENT_PARENT_ERROR_CODE = "8002";
    public static final String ORG_DEPARTMENT_PARENT_ERROR_MESSAGE = "部门的新上级部门不能是其子部门";

    public static final String DUPLICATE_ERROR_CODE = "8003";
    public static final String DUPLICATE_ERROR_MESSAGE = "已存在重复";

    public static final String NOT_EXIST_ERROR_CODE = "8004";
    public static final String NOT_EXIST_ERROR_MESSAGE = "不存在";

    public static final String TOKEN_ERROR = "5001";

    public static final String TOKEN_NULL = "5000";

    /* 大家写错误码的时候按照编号依次写,不然后面多的话会重复!*/
}