package cn.timer.api.utils;

import org.springframework.stereotype.Service;

/**
 * @author wuqingjun
 * @email 284718418@qq.com
 * @date 2021/12/13
 */
@Service("extensionResultUtil")
public class ExtensionResultUtil<T> {

//	private static final String CODE_KEY = "code";
//	private static final String RESULT_KEY = "result";
//	private static final String MESSAGE_KEY = "message";
//	private static final String DATA_KEY = "data";
//
//	private static final String PAGE_KEY = "page";
//	private static final String NUMBER_KEY = "number";
//	private static final String SIZE_KEY = "size";
//	private static final String TOTALELEMENTS_KEY = "totalelements";
//	private static final String TOTALPAGES_KEY = "totalpages";
//	private static final String OFFSET_KEY = "offset";

	private static final String MESSAGE_SUCCESS = "操作成功";
	private static final String MESSAGE_FAIL = "操作失败";
//	private static final String MESSAGE_ERROR = "操作错误";
//	private static final String MESSAGE_KICKOUT = "当前账户已在其他地方登录,请重新登录";
	private static final String MESSAGE_PARAMERROR = "参数错误";
//	private static final String MESSAGE_UNAUTHORIZED = "授权错误";
//	private static final String MESSAGE_UNAUTHENTICATED = "认证错误";
//	private static final String MESSAGE_EXCEPTION = "服务器异常";

	private static final Integer STATUS_CODE_SUCCESS = 200;
	private static final Integer STATUS_CODE_UNLOGIN = 301;
	private static final Integer STATUS_CODE_UNPARAM = 400;
	private static final Integer STATUS_CODE_EXCEPTION = 500;

	private ExtensionResult<T> extensionResult;

	public ExtensionResultUtil() {
		extensionResult = new ExtensionResult<>();
		extensionResult.setResult(true);
		extensionResult.setMsg("success");
		this.extensionResult.setErrormsg("");
		extensionResult.setResultcode(STATUS_CODE_SUCCESS);
	}

	public ExtensionResult<T> setData(T t) {
		this.extensionResult.setData(t);
		this.extensionResult.setResultcode(STATUS_CODE_SUCCESS);
		this.extensionResult.setMsg("success");
		this.extensionResult.setErrormsg("");
		return this.extensionResult;
	}

	public ExtensionResult<T> setSuccessMsg(String msg) {
		this.extensionResult.setResult(true);
		this.extensionResult.setResultcode(STATUS_CODE_SUCCESS);
		this.extensionResult.setMsg(msg);
		this.extensionResult.setErrormsg("");
		this.extensionResult.setData(null);
		return this.extensionResult;
	}


	public ExtensionResult<T> setData(T t, String msg) {
		this.extensionResult.setData(t);
		this.extensionResult.setResultcode(STATUS_CODE_SUCCESS);
		this.extensionResult.setMsg(msg);
		this.extensionResult.setErrormsg("");
		return this.extensionResult;
	}
	
	public ExtensionResult<T> setErrorMsg(T t) {
		this.extensionResult.setData(t);
		this.extensionResult.setResultcode(STATUS_CODE_UNPARAM);
		this.extensionResult.setErrormsg(MESSAGE_PARAMERROR);
		this.extensionResult.setMsg("");
		return this.extensionResult;
	}

	public ExtensionResult<T> setErrorMsg(String msg) {
		this.extensionResult.setResult(false);
		this.extensionResult.setMsg("");
		this.extensionResult.setErrormsg(msg);
		this.extensionResult.setResultcode(STATUS_CODE_EXCEPTION);
		return this.extensionResult;
	}

	public ExtensionResult<T> setErrorMsg(Integer code, String msg) {
		this.extensionResult.setResult(false);
		this.extensionResult.setErrormsg(msg);
		this.extensionResult.setMsg("");
		this.extensionResult.setResultcode(code);
		return this.extensionResult;
	}

	public static <T> ExtensionResult<T> data(T t) {
		return new ExtensionResultUtil<T>().setData(t);
	}

}