package com.trs.project.constant;

import lombok.AllArgsConstructor;

/**
 * <p>Title: Global</p>
 * <p>Description: </p>
 * <p>Company: </p>
 *
 * @author Administrator
 * @date 2016年8月19日 下午6:18:08
 */
public final class Global {

    public static final String BLANK_STR = "";
    /* 定义默认long类型字段的默认值 */
    public final static long LONG_DEFAULT_VALUE = 0L;
    /* 用户类型：管理员用户 */
    public final static int USER_IS_ADMIN = 1;
    /* 用户类型：普通用户 */
    public final static int USER_IS_NOT_ADMIN = 0;
    /* 管理员用户名 */
    public final static String ADMIN_USERNAME = "dev";
    /* 默认页数据条数 */
    public final static String DEFAULT_PAGE_SIZE = "15";
    public static final Integer DEFAULT_PAGE_SIZE_INTEGER = 15;
    /* 默认页数据条数 */
    public final static String DEFAULT_START_PAGE = "1";
    public static final Integer DEFAULT_START_PAGE_INTEGER = 1;
    /* 前台登录用户统一名称 */
    public final static String CURR_LOGIN_USER = "loginUser";
    /* 前台网民用户类型统一标识 */
    public final static String CURR_WEB_LOGIN_USER = "loginUser";
    /* 登录时候系统验证码 */
    public final static String SESSION_CAPTCHA_KEY_ON_LOGIN = "loginCaptcha";
    /* 手机短信验证码 REGISTER_CAPTCHA = "registerCaptcha" */
    public static final String REGISTER_CAPTCHA = "registerCaptcha";
    /* 用户登录的设备类型-pc端 */
    public final static int USER_DEVICE_TYPE_PC = 0;
    /* 用户登录的设备类型-手机端 */
    public final static int USER_DEVICE_TYPE_MOBILE = 1;
    /* 用户登录的设备类型-平板 */
    public final static int USER_DEVICE_TYPE_TABLE = 2;
    /* 短信验证码默认5分钟内有效 */
    public static final String DEFAULT_TIME = "5";
    /* 默认的临时文件夹(被删除的附件，调查、信箱下载的数据存放处) <br>
     * 一定时间内进行清空操作 */
    public static final String DEFAULT_TEMP_DIR = "temporary";
    /* 默认的接口调用错误信息内容: 系统错误,请联系管理员 */
    public static final String DEFAULT_ERROR_MESSAGE = "系统错误,请联系管理员";
    /* 定义默认int类型字段的默认值 */
    public final static int INT_DEFAULT_VALUE = 0;
    public static final Integer COMMONS_OK = 1;
    public static final Integer COMMONS_NOT_OK = 0;
    public static final String COMMONS_STR_OK = "1";
    public static final String COMMONS_STR_NOT_OK = "0";

    public static boolean isStringOkOrNot(String val) {
        return COMMONS_STR_OK.equals(val) || COMMONS_STR_NOT_OK.equals(val);
    }

    public static <T> T defIfNull(T t, T def) {
        if (t == null) {
            return def;
        }
        return t;
    }

    public enum FileExtendedName {
        ZIP(".zip"),
        WORD2007(".DOCX"),
        EXCEL2007(".XLSX");
        private final String extendedNameWithDot;

        FileExtendedName(String extendedNameWithDot) {
            this.extendedNameWithDot = extendedNameWithDot;
        }

        public String getExtendedNameWithDot() {
            return extendedNameWithDot;
        }

    }


    /**
     * 通用 状态值 , 适用于 某个字段只表示：非负即正 ，非是即否
     */
    @AllArgsConstructor
    public enum Status{
        TRUE(COMMONS_OK, COMMONS_STR_OK, true, "标识 是"),
        FALSE(COMMONS_NOT_OK, COMMONS_STR_NOT_OK, false, "标识 否");

        private int intValue ;
        private String stringValue;
        private boolean booleanValue;
        private String desc;

        public int getIntValue() {
            return intValue;
        }

        public String getStringValue() {
            return stringValue;
        }

        public boolean isBooleanValue() {
            return booleanValue;
        }

        public boolean equals(String status) {
            return stringValue.equals(status);
        }

        public boolean equals(Boolean status) {
            return status != null && status == booleanValue ;
        }

        public boolean equals(Integer status) {
            return status != null && intValue == status;
        }

    }

    /**
     * 查询时，指定的时间范围枚举值
     */
    @AllArgsConstructor
    public enum TimeRangeEnum{
        ONE_DAY("1d","查询时，用于表示一天以内"),
        ONE_WEEK("1w","查询时，用于表示一周以内"),
        ONE_MONTH("1m","查询时，用于表示一月以内");

        private String value;
        private String desc;

        public String getValue() {
            return value;
        }

        public boolean equals(String timeRange){
            return value.equals(timeRange);
        }
    }

}
