/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.core.boot.ctrl;

import javax.servlet.http.HttpServletRequest;

import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Blade控制器封装类
 *
 * @author Chill
 */
public class BladeController {

	@Autowired
	private HttpServletRequest request;

	/**
	 * 获取request
	 */
	public HttpServletRequest getRequest() {
		return this.request;
	}

	/**
	 * 获取当前用户
	 *
	 * @return
	 */
	public BladeUser getUser() {
		return AuthUtil.getUser();
	}

	/** ============================     API_RESULT    =================================================  */

	/**
	 * 返回ApiResult
	 *
	 * @param data
	 * @return R
	 */
	public <T> R<T> data(T data) {
		return R.data(data);
	}

	/**
	 * 返回ApiResult
	 *
	 * @param data
	 * @param message
	 * @return R
	 */
	public <T> R<T> data(T data, String message) {
		return R.data(data, message);
	}

	/**
	 * 返回ApiResult
	 *
	 * @param data
	 * @param message
	 * @param code
	 * @return R
	 */
	public <T> R<T> data(T data, String message, int code) {
		return R.data(code, data, message);
	}

	/**
	 * 返回ApiResult
	 *
	 * @param message
	 * @return R
	 */
	public R<?> success(String message) {
		return R.success(message);
	}

	/**
	 * 返回ApiResult
	 *
	 * @param message
	 * @return R
	 */
	public R<?> fail(String message) {
		return R.fail(message);
	}

	/**
	 * 返回ApiResult
	 *
	 * @param flag
	 * @return R
	 */
	public R<?> status(boolean flag) {
		return R.status(flag);
	}
}
