package kr.co.uplus.ez.api.calculate;

import kr.co.uplus.ez.api.calculate.dto.*;
import kr.co.uplus.ez.common.data.ApiResponseCode;
import kr.co.uplus.ez.common.data.Paging;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CalculateService {

	@Autowired
	@Qualifier("sqlSessionTemplateDb1")
	private SqlSessionTemplate sqlSessionMaster;

	@Autowired
	@Qualifier("sqlSessionTemplateDb2")
	private SqlSessionTemplate sqlSessionSlave;

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 정산 이력 목록 조회
	 * @param calcListReqDto
	 * @return
	 */
	public CalcListResDto calcList(CalcListReqDto calcListReqDto) {

		CalculateMapper calcMapper = sqlSessionSlave.getMapper(CalculateMapper.class);
		CalcListRes calcListRes = new CalcListRes();

		String nowPage = String.valueOf(calcListReqDto.getPage());
		int totalCnt = calcMapper.selectCalculateListTotalCnt(calcListReqDto);

		if (totalCnt == 0) {
			calcListRes.setList(new ArrayList<>());
			Paging paging = new Paging();
			paging.setPage(nowPage);
			paging.setTotalCnt(String.valueOf(totalCnt));
			calcListRes.setPaging(paging);

			return new CalcListResDto(ApiResponseCode.CM_NOT_FOUND, calcListRes);
		}

		int page = calcListReqDto.getPage();
		int pagePerRows = calcListReqDto.getPagePerRows();
		page = (page - 1) * pagePerRows;
		calcListReqDto.setPage(page);

		List<CalcList> calcLists = calcMapper.selectCalculateList(calcListReqDto);

		calcListRes.setList(new ArrayList<>());
		calcListRes.setList(calcLists);
		Paging paging = new Paging();
		paging.setPage(nowPage);
		paging.setTotalCnt(String.valueOf(totalCnt));
		calcListRes.setPaging(paging);

		return new CalcListResDto(ApiResponseCode.SUCCESS, calcListRes);
	}

	/**
	 * date : 2022. 4. 25.
	 * auth : ckr
	 * desc : 정산 이력 목록 엑셀 다운로드
	 * @param calcListExcelReqDto
	 * @return
	 */
	public CalcListExcelResDto calcListExcel(CalcListExcelReqDto calcListExcelReqDto) {
		CalculateMapper calcMapper = sqlSessionSlave.getMapper(CalculateMapper.class);
		CalcListExcelRes calcListExcelRes = new CalcListExcelRes();
		List<CalcList> calcLists = calcMapper.selectCalculateExcelList(calcListExcelReqDto);
		calcListExcelRes.setList(calcLists);
		return new CalcListExcelResDto(ApiResponseCode.SUCCESS, calcListExcelRes);
	}

}
