/**
 * date : 2022. 4. 25.
 * auth : ckr
 * desc : 발송 통계
 */
package kr.co.uplus.ez.api.stats;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import kr.co.uplus.ez.api.stats.dto.*;
import kr.co.uplus.ez.common.components.ValidComponents;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.ApiResponseMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.Map;

@RestController
@RequestMapping(value = "api/v1/bo/stats")
public class StatsController {

	@Autowired
	StatsService statsService;

	@Autowired
	ValidComponents validComponents;

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 월별 통계 목록 조회
	 * @param monthListReqDto
	 * @
	 */
	@ApiOperation(value = "monthList", notes = "월별 통계 목록 조회")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/monthList" , method = {RequestMethod.POST})
	@ResponseBody
	public MonthListResDto monthList(@RequestBody @Valid MonthListReqDto monthListReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new MonthListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.monthList(monthListReqDto);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 월별 통계 목록 엑셀 다운로드
	 * @param paramMap
	 * @
	 */
	@Deprecated
	@RequestMapping(value = "/monthListExcel" , method = {RequestMethod.POST})
	@ResponseBody
	public ApiResponseMessage monthListExcel(@RequestBody Map<String, Object> paramMap) {
		return statsService.monthListExcel(paramMap);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 일별 통계 목록 조회
	 * @param dayListReqDto
	 * @
	 */
	@ApiOperation(value = "dayList", notes = "일별 통계 목록 조회")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/dayList" , method = {RequestMethod.POST})
	@ResponseBody
	public DayListResDto dayList(@RequestBody @Valid DayListReqDto dayListReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new DayListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.dayList(dayListReqDto);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 일별 통계 목록 엑셀 다운로드
	 * @param paramMap
	 * @
	 */
	@Deprecated
	@RequestMapping(value = "/dayListExcel" , method = {RequestMethod.POST})
	@ResponseBody
	public ApiResponseMessage dayListExcel(@RequestBody Map<String, Object> paramMap) {
		return statsService.dayListExcel(paramMap);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 사업자 월별 통계 목록 조회
	 * @param bsnmMonthListReqDto
	 * @
	 */
	@ApiOperation(value = "bsnmMonthList", notes = "사업자 월별 통계 목록 조회")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/bsnmMonthList" , method = {RequestMethod.POST})
	@ResponseBody
	public BsnmMonthListResDto bsnmMonthList(@RequestBody @Valid BsnmMonthListReqDto bsnmMonthListReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new BsnmMonthListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.bsnmMonthList(bsnmMonthListReqDto);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 사업자 월별 통계 목록 엑셀 다운로드
	 * @param bsnmMonthListExcelReqDto
	 * @
	 */
	@ApiOperation(value = "bsnmMonthListExcel", notes = "사업자 월별 통계 목록 엑셀 다운로드")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/bsnmMonthListExcel" , method = {RequestMethod.POST})
	@ResponseBody
	public BsnmMonthListExcelResDto bsnmMonthListExcel(@RequestBody @Valid BsnmMonthListExcelReqDto bsnmMonthListExcelReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new BsnmMonthListExcelResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.bsnmMonthListExcel(bsnmMonthListExcelReqDto);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 사업자 일별 통계 목록 조회
	 * @param bsnmDayListReqDto
	 * @
	 */
	@ApiOperation(value = "bsnmDayList", notes = "사업자 일별 통계 목록 조회")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/bsnmDayList" , method = {RequestMethod.POST})
	@ResponseBody
	public BsnmDayListResDto bsnmDayList(@RequestBody @Valid BsnmDayListReqDto bsnmDayListReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new BsnmDayListResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.bsnmDayList(bsnmDayListReqDto);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 사업자 일별 통계 목록 엑셀 다운로드
	 * @param bsnmDayListExcelReqDto
	 * @
	 */
	@ApiOperation(value = "bsnmDayListExcel", notes = "사업자 일별 통계 목록 엑셀 다운로드")
	@ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") })
	@RequestMapping(value = "/bsnmDayListExcel" , method = {RequestMethod.POST})
	@ResponseBody
	public BsnmDayListExcelResDto bsnmDayListExcel(@RequestBody BsnmDayListExcelReqDto bsnmDayListExcelReqDto, BindingResult bindingResult) {
		if (validComponents.validParameter(bindingResult)) {
			return new BsnmDayListExcelResDto(ApiResponseCode.CM_PARAMETER_ERROR);
		}
		return statsService.bsnmDayListExcel(bsnmDayListExcelReqDto);
	}

}
