package com.uas.finance.constants;

import com.uas.finance.util.StringUtils;

/**
 * 状态
 * 
 * @author sunyj
 * @since 2017年8月18日 上午9:11:25
 */
public enum Status {

	/**
	 * 待处理
	 */
	UNPROCESSED(100),

	/**
	 * 已批准
	 */
	APPROVED(101),

	/**
	 * 不批准
	 */
	UNAPPROVED(102),

	/**
	 * 已保存
	 */
	SAVED(201),

	/**
	 * 已提交
	 */
	SUBMIT(202),

	/**
	 * 待下载
	 */
	NOT_UPLOAD(202),

	/**
	 * 已下载
	 */
	DOWNLOADED(203),


	/**
	 *批复成功
	 */
	SUCCESS(204),


	/**
	 * 批复失败
	 */
	FAILED(205);



	private Integer code;

	private Status(Integer code) {
		this.code = code;
	}

	public Integer code() {
		return code;
	}

	/**
	 * 获取状态
	 * 
	 * @param name
	 *            状态名
	 * @return 获取的状态，失败则返回null
	 */
	public static Status getStatus(String name) {
		if (StringUtils.isEmpty(name)) {
			return null;
		}
		try {
			return Status.valueOf(name.toUpperCase());
		} catch (IllegalArgumentException e) {
			return null;
		}
	}

	/**
	 * 获取状态
	 * 
	 * @param name
	 *            状态名
	 * @return 获取的状态
	 * @throws IllegalArgumentException
	 *             失败，抛出异常
	 */
	public static Status checkStatus(String name) throws IllegalArgumentException {
		Status status = getStatus(name);
		if (status == null) {
			throw new IllegalArgumentException("不支持该状态：" + name);
		}
		return status;
	}

	/**
	 * 获取状态
	 * 
	 * @param code
	 *            状态码
	 * @return 获取的状态，失败则返回null
	 */
	public static Status getStatus(Integer code) {
		if (code == null) {
			return null;
		}
		for (Status status : Status.values()) {
			if (status.code == code) {
				return status;
			}
		}
		return null;

	}

	/**
	 * 获取状态
	 * 
	 * @param code
	 *            状态码
	 * @return 获取的状态
	 * @throws IllegalArgumentException
	 *             失败，抛出异常
	 */
	public static Status checkStatus(Integer code) throws IllegalArgumentException {
		Status status = getStatus(code);
		if (status == null) {
			throw new IllegalArgumentException("不支持该状态：" + code);
		}
		return status;
	}

}
