package itn.let.mail.service;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;

import itn.let.mjo.pay.service.RefundVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 
 * @packageName : itn.let.mail.service 
 * @fileName 	: SuccessResponse.java 
 * @author 		: 이호영 
 * @date 		: 2022.07.04
 * @description : RestApi 응답에 사용할 Class
 * @TODO : CLASS 위치를 다시 잡아서 사용해야함
 * =========================================================== 
 * DATE          AUTHOR   NOTE 
 * ----------------------------------------------------------- *
 * 2022.07.04    이호영      최초 생성
 * 
 * 
 * 
 */



/*
 * • 1XX : 조건부 응답
 * • 2XX : 성공
 * • 3XX : 리다이렉션 완료
 * • 4XX : 요청 오류
 * • 500 : 서버 오류
 *
 * 참고 : https://km0830.tistory.com/33
 *
 * ====== 자주 사용하는 코드 =====
 * 200 : Ok : 서버가 클라이언트의 요청을 성공적으로 처리, 웹 페이지에서는 페이지 요청이 정상적으로 완료 (Ok)
 * 400 : Bad Request : 잘못 요청 (Bad Request)
 * 401 : Unauthorized : 권한 없음, 예를 들면, 로그인 페이지가 필요한 페이지를 로그인 없이 접속하려는 경우 반환되는 코드 (인증 실패) (Unauthorized)
 *
 * */
@Getter
@Setter
@NoArgsConstructor
public class StatusResponse {

	private  HttpStatus status;

	private  String message;
	
	private  RefundVO refundVO;
	
	private  Object object;
	
	private  Object apiReturn;
	
	private  String messageTemp;

	private LocalDateTime timestamp;

	public StatusResponse(HttpStatus status, RefundVO refundVO, LocalDateTime timestamp) {
		this.status = status;
		this.refundVO = refundVO;
		this.timestamp = timestamp;
	}
	
	public StatusResponse(HttpStatus status, Object object, LocalDateTime timestamp) {
		this.status = status;
		this.object = object;
		this.timestamp = timestamp;
	}
	
	public StatusResponse(HttpStatus status, String message, LocalDateTime timestamp) {
		this.status = status;
		this.message = message;
		this.timestamp = timestamp;
	}

	public StatusResponse(HttpStatus status, String message, String messageTemp, LocalDateTime timestamp) {
		this.status = status;
		this.message = message;
		this.timestamp = timestamp;
		this.messageTemp = messageTemp;
	}

	public StatusResponse(HttpStatus status, String message) {
		this.status = status;
		this.message = message;
	}

	public StatusResponse(HttpStatus status, String message, Object object) {
		this.status = status;
		this.message = message;
		this.object = object;
	}
	public StatusResponse(HttpStatus status, String message
			, Object object
			, Object apiReturn
			) {
		this.status = status;
		this.message = message;
		this.object = object;
		this.apiReturn = apiReturn;
	}
	

	/**
	 * @methodName	: statusResponseSet 
	 * @author		: 이호영
	 * @date		: 2025. 6. 24.
	 * @description	: 
	 * @return : StatusResponse
	 * @param statusResponse
	 * @param httpStatus
	 * @param msg
	 * @param statCode - statCode는 API RETURN를 위한 코드
	 * @return
	 * 
	 */
	public static StatusResponse statusResponseSet(StatusResponse statusResponse, HttpStatus httpStatus, String msg, String statCode ) {
		statusResponse.setStatus(httpStatus);
		statusResponse.setMessage(msg);

		Map<String, Object> apiReturnMap = new HashMap<>();
		apiReturnMap.put("statCode", statCode);
		apiReturnMap.put("result", httpStatus.toString());
		statusResponse.setApiReturn(apiReturnMap);
		
		return statusResponse;
		
	}
 
	
	
}
