package com.style24.core.biz.service;

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;

import com.gagaframework.web.parameter.GagaMap;
import com.style24.core.biz.dao.TscFreegiftDao;
import com.style24.core.support.message.TscMessageByLocale;
import com.style24.persistence.domain.Order;

import lombok.extern.slf4j.Slf4j;

/**
 * 사은품관리 Service
 *
 * @author jsh77b
 * @since 2020. 11. 16
 */
@Service
@Slf4j
public class TscFreegiftService {

	@Autowired
	private TscMessageByLocale message;

	@Autowired
	private Environment env;

	@Autowired
	private TscFreegiftDao freegiftDao;
	
	/**
	 * 사은품정보 조회
	 * @param Order
	 * @return Order
	 * @author jsh77b
	 * @since 2020. 12. 16
	 */
	public GagaMap getOrderFreegift(Order order) {
		
		GagaMap resultMap = new GagaMap();
		Collection<Order> freegiftGoodsList 	= null;
		Collection<Order> freegiftList 			= null;
		
		// 1. 장바구니 담긴 상품으로 적용된 사은품 프로모션 정보 조회 (with 상품금액)
		Collection<Order> freegiftApplyAmtList = freegiftDao.getFreeGiftGoodsApplyAmt(order);
		
		// 1.1 장바구니 상품으로 적용된 사은품 여부 판단
		if (freegiftApplyAmtList.size() > 0) {
			
			Collection<Order> freegiftGoodsApplyAmtList = new ArrayList<Order>();
			int tempFreegiftSq 		= 0;
			int index				= 0;
			boolean	temp			 = false;
			
			// 사은품시퀀스 담기
			for (Order freegiftApplyAmt : freegiftApplyAmtList) {
				temp = true;
				if (freegiftGoodsApplyAmtList.size() > 0) {
					for (Order freegiftGoodsApplyAmt : freegiftGoodsApplyAmtList) {
						if (freegiftApplyAmt.getFreegiftSq() == freegiftGoodsApplyAmt.getFreegiftSq()) {
							temp = false;
						}
					}
					
					if (temp) {
						freegiftGoodsApplyAmtList.add(freegiftApplyAmt);
					}
				} else {
					freegiftGoodsApplyAmtList.add(freegiftApplyAmt);
				}
			}
			
			// 사은품시퀀스(FREEGIFT_SQ), 사은품시퀀스합계금액(FREEGIFT_AMT)
			for (Order freegiftGoodsApplyAmt : freegiftGoodsApplyAmtList) {
				// 금액초기화
				freegiftGoodsApplyAmt.setFreegiftAmt(0);
				
				for (Order freegiftApplyAmt : freegiftApplyAmtList) {
					int ordAmt = (freegiftApplyAmt.getCurrPrice() + freegiftApplyAmt.getOptAddPrice()) * freegiftApplyAmt.getGoodsQty();
					if (freegiftGoodsApplyAmt.getFreegiftSq() == freegiftApplyAmt.getFreegiftSq()) {
						freegiftGoodsApplyAmt.setFreegiftAmt(freegiftGoodsApplyAmt.getFreegiftAmt() + ordAmt);
					}
				}
			}
			
			// 사은품시퀀스배열생성
			int[] freegiftSqArr = new int[freegiftGoodsApplyAmtList.size()];
			index = 0;
			
			// 사은품시퀀스(FREEGIFT_SQ), 사은품시퀀스합계금액(FREEGIFT_AMT)
			for (Order fregiftGoodsApplyAmt : freegiftGoodsApplyAmtList) {
				freegiftSqArr[index] = fregiftGoodsApplyAmt.getFreegiftSq();
				index++;
			}
			
			order.setFreegiftSqArr(freegiftSqArr);
			
			// 2. 사은품 적용구간 정보 조회
			Collection<Order> freegiftGoodsApplySectionList = freegiftDao.getFreeGiftGoodsApplySection(order);
			
			// 2.1 사은품 적용구간이 있는지 판단
			if (freegiftGoodsApplySectionList.size() > 0) {
				int[] freegiftSectionSqArr = new int[freegiftGoodsApplySectionList.size()];
				
				int tempFreegiftSectionSq = 0;
				int k = 0;
				
				// 사은품시퀀스(FREEGIFT_SQ), 사은품시퀀스합계금액(FREEGIFT_AMT)
				for (Order freegiftGoodsApplyAmt : freegiftGoodsApplyAmtList) {
					int freegiftAmt 	= freegiftGoodsApplyAmt.getFreegiftAmt();
					
					// 사은풐구간시퀀스(FREEGIFT_SECTION_SQ, 사은품시퀀스(FREEGIFT_SQ), 사은풐구간금액(SECTION_VAL)
					for (Order freegiftGoodsApplySection : freegiftGoodsApplySectionList) {
						int freegiftSectionSq 	= freegiftGoodsApplySection.getFreegiftSectionSq();
						int sectionVal 			= freegiftGoodsApplySection.getSectionVal();
						
						// 같은 사은품 프로모션끼리 등록
						if (freegiftGoodsApplyAmt.getFreegiftSq() == freegiftGoodsApplySection.getFreegiftSq()) {
							// 2021.05.07 금액체크는 이상일때 수정
							if (freegiftAmt >= sectionVal) {
								tempFreegiftSectionSq = freegiftSectionSq;
							}
						}
					}
					
					freegiftSectionSqArr[k] = tempFreegiftSectionSq;
					k++;
				}
				
				// 3. 사은품 적용구간 의 적용 사은품정보조회
				order.setFreegiftSectionSqArr(freegiftSectionSqArr);
				Collection<Order> freegiftGoodsApplyValList = freegiftDao.getFreeGiftGoodsApplyVal(order);
				
				if (freegiftGoodsApplyValList.size() > 0) {
					freegiftList 		= new ArrayList<Order>();
					freegiftGoodsList 	= new ArrayList<Order>();

					for (Order freegiftGoodsApplyVal : freegiftGoodsApplyValList) {
						if (freegiftGoodsApplyVal.getFreegiftSq() != tempFreegiftSq) {
							freegiftList.add(freegiftGoodsApplyVal);
							tempFreegiftSq = freegiftGoodsApplyVal.getFreegiftSq();
						}
						
						freegiftGoodsList.add(freegiftGoodsApplyVal);
					}
				}
			}
		}
		
		resultMap.set("freegiftApplyAmtList"		, freegiftApplyAmtList);
		resultMap.set("freegiftGoodsList"			, freegiftGoodsList);
		resultMap.set("freegiftList"				, freegiftList);
		
		return resultMap;
	}
	
	/**
	 * 사은품정보 프로모션별 상품목록 분리 작업
	 * @param Order
	 * @return Order
	 * @author jsh77b
	 * @since 2020. 12. 16
	 */
	// public Collection<Order> getOrderFreegift(Order order) {
	//	
	// }
	

}
