package com.style24.admin.support.controller;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.slf4j.Slf4j;

import com.gagaframework.web.rest.server.GagaResponseStatus;

/**
 * Error Controller
 * 		Disabling the Whitelabel Error Page
 * 		- application.yml 파일에 다음을 추가
 * 			server.error.path: /error
 * 			server.error.whitelabel.enabled: false
 * 
 * @author gagamel
 * @since 2020. 10. 5
 */
@Controller
@Slf4j
public class TsaErrorController implements ErrorController {

	/**
	 * 이 메서드는 스프링 부트 2.3.x부터 deprecated됨.
	 * 이 메서드 대신 custom path를 지정하려면 server.error.path 속성으로 지정해야 한다.
	 */
	@Override
	public String getErrorPath() {
		return null;
	}

	/**
	 * Error
	 */
	@GetMapping("/error")
	public String error(HttpServletRequest request) throws HttpRequestMethodNotSupportedException {
		Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

		if (status != null) {
			Integer statusCode = Integer.valueOf(status.toString());
			log.error("Error StatusCode: {}", statusCode);

			if (statusCode == GagaResponseStatus.NOT_FOUND.getCode()) {
				return "error/404";
			} else if (statusCode == GagaResponseStatus.UNAUTHORIZED.getCode()) {
				return "error/nosession";
			}
		}

		log.error("Error Message: {}", request.getAttribute(RequestDispatcher.ERROR_MESSAGE));

		return "error/500";
	}

}
