package com.style24.batch.biz.service;

import java.util.Collection;

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

import com.style24.batch.biz.dao.TsbGoodsEpDao;
import com.style24.persistence.domain.GoodsEp;

import lombok.extern.slf4j.Slf4j;

/**
 * 상품 EP Service
 *
 * @author gagamel
 * @since 2020. 6. 14
 */
@Service
@Slf4j
public class TsbGoodsEpService {

	@Autowired
	private Environment env;

	@Autowired
	private TsbGoodsEpDao goodsEpDao;

	/**
	 * 네이버 EP 생성
	 * @param epType - EP유형(ALL:전체EP, SUMMARY:요약EP)
	 * @author gagamel
	 * @since 2021. 6. 14
	 */
	@Transactional("shopTxnManager")
	public void createNaverEp(String epType) {
		// 1.1. 상품 이미지 정보 truncate
		goodsEpDao.truncateEpGoodsImage();
		log.info("1.1. 상품 이미지 정보 truncate");

		GoodsEp goodsEp = new GoodsEp();
		goodsEp.setGoodsImgUrl(env.getProperty("ep.goods.img.url"));
		goodsEp.setGoodsDtlUrl(env.getProperty("ep.goods.dtl.url"));
		goodsEp.setEpType(epType);

		int cnt = 0;
		if (epType.equals("ALL")) {
			// 1.2. 상품 이미지 정보 생성
			cnt = goodsEpDao.createEpGoodsImage(goodsEp);
			log.info("1.2. 상품 이미지 정보 생성: {}건", cnt);

			// 2.1. 상품 추가 이미지 정보 truncate
			goodsEpDao.truncateEpGoodsAddImage();
			log.info("2.1. 상품 추가 이미지 정보 truncate");

			// 2.2. 상품 추가 이미지 정보 생성
			cnt = goodsEpDao.createEpGoodsAddImage(goodsEp);
			log.info("2.2. 상품 추가 이미지 정보 생성: {}건", cnt);
		}

		// 3.1. EP카드행사 정보 truncate
		goodsEpDao.truncateEpCardEvent();
		log.info("3.1. EP카드행사 정보 truncate");

		// 3.2. EP카드행사 정보 생성
		cnt = goodsEpDao.createEpCardEvent();
		log.info("3.2. EP카드행사 정보 생성: {}건", cnt);

		// 4.1. EP쿠폰 정보 truncate
		goodsEpDao.truncateEpCoupon();
		log.info("4.1. EP쿠폰 정보 truncate");

		// 4.2. EP쿠폰 정보 생성
		cnt = goodsEpDao.createEpCoupon();
		log.info("4.2. EP쿠폰 정보 생성: {}건", cnt);

		// 5.1. EP무이자행사 정보 truncate
		goodsEpDao.truncateEpInterestFreeEvent();
		log.info("5.1. EP무이자행사 정보 truncate");

		// 5.2. EP무이자행사 정보 생성
		cnt = goodsEpDao.createEpInterestFreeEvent();
		log.info("5.2. EP무이자행사 정보 생성: {}건", cnt);

		// 6.1. 이전 EP네이버 정보 삭제
		goodsEpDao.deleteEpNaver("PREV");
		log.info("6.1. 이전 EP네이버 정보 삭제");

		// 6.2. EP네이버 이전 데이터로 백업
		goodsEpDao.createPreviousEpNaver();
		log.info("6.2. EP네이버 이전 데이터로 백업: {}건", cnt);

		// 6.3. 현재 EP네이버 정보 삭제
		goodsEpDao.deleteEpNaver("CURR");
		log.info("6.3. 현재 EP네이버 정보 삭제");

		// 6.4. EP네이버 현재 데이터 생성
		cnt = goodsEpDao.createCurrentEpNaver(goodsEp);
		log.info("6.4. EP네이버 현재 데이터 생성: {}건", cnt);

		// 6.5. 최종 EP네이버 정보 삭제
		goodsEpDao.deleteEpNaver("LAST");
		log.info("6.5. 최종 EP네이버 정보 삭제");

		// 6.6. 최종 EP네이버 생성
		cnt = goodsEpDao.createLastEpNaver(goodsEp);
		log.info("6.6. 최종 EP네이버 생성: {}건", cnt);

//		int jobHH = Integer.parseInt(GagaDateUtil.getToday("HH"));
//		log.info("[createNaverEp] jobHH=> {}", jobHH);
//		if (jobHH == 0) {
//			Goods goodsParams = new Goods();
//
//			// TB_NAVER_EP삭제
//			goodsEPDao.deleteTbNaverEp();
//
//			// TB_NAVER_EP 생성
//			goodsEPDao.createTbNaverEp(goodsParams);
//
//			createNaverEPFile("all", "");
//		}
//
//		if (jobHH >= 7 && jobHH <= 19) {
//
//			if (jobHH % 2 == 1) {
//
//				// 요약 start
//				// 01 시 전체EP 기준 변경분
////				int floorUnit = envsetService.getPointUnit(TscConstants.Site.STYLE24.value());
//				Goods goodsParams = new Goods();
////				goodsParams.setKind("brief");
////				goodsParams.setFloorUnit(floorUnit);
//
//				// 직영공식몰도 입점사로 정책상 요약EP 사용이 불가하여 미작업 처리
//				//				createNaverEPTemp(goodsParams);
//				//				createNaverEPFile("brief", "");
//				// 요약 end
//
//				// 마케팅 전체
//				goodsEPDao.deleteTbNaverEpMarketing();
//				goodsEPDao.createTbNaverEpMarketing(goodsParams);
//				createNaverEPFile("all", "Y");
//			}
//		}
	}

	/**
	 * 네이버 EP 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 6. 14
	 */
	public Collection<GoodsEp> getNaverEpList() {
		return goodsEpDao.getNaverEpList();
	}

	/**
	 * 네이버 EP 총건수
	 * @return
	 * @author gagamel
	 * @since 2021. 8. 26
	 */
	public int getNaverEpTotalCount() {
		return goodsEpDao.getNaverEpTotalCount();
	}

	/**
	 * 네이버 EP 페이징 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 8. 26
	 */
	public Collection<GoodsEp> getNaverEpPagingList(GoodsEp goodsEp) {
		return goodsEpDao.getNaverEpPagingList(goodsEp);
	}

	/**
	 * 네이버 판매지수EP 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 6. 15
	 */
	public Collection<GoodsEp> getNaverSellEpList() {
		return goodsEpDao.getNaverSellEpList();
	}

	/**
	 * 다음 EP 생성
	 * @param epType - EP유형(ALL:전체EP, SUMMARY:요약EP)
	 * @author gagamel
	 * @since 2021. 6. 15
	 */
	@Transactional("shopTxnManager")
	public void createDaumEp(String epType) {
		// 네이버EP 생성 시 처리했으므로 5.2 step까지 skip
//		// 1.1. 상품 이미지 정보 truncate
//		goodsEpDao.truncateEpGoodsImage();
//		log.info("1.1. 상품 이미지 정보 truncate");
//
//		GoodsEp goodsEp = new GoodsEp();
//		goodsEp.setGoodsImgUrl(env.getProperty("ep.goods.img.url"));
//		goodsEp.setGoodsDtlUrl(env.getProperty("ep.goods.dtl.url"));
//		goodsEp.setEpType(epType);
//
//		// 1.2. 상품 이미지 정보 생성
//		int cnt = goodsEpDao.createEpGoodsImage(goodsEp);
//		log.info("1.2. 상품 이미지 정보 생성: {}건", cnt);
//
//		// 3.1. EP카드행사 정보 truncate
//		goodsEpDao.truncateEpCardEvent();
//		log.info("3.1. EP카드행사 정보 truncate");
//
//		// 3.2. EP카드행사 정보 생성
//		cnt = goodsEpDao.createEpCardEvent();
//		log.info("3.2. EP카드행사 정보 생성: {}건", cnt);
//
//		// 4.1. EP쿠폰 정보 truncate
//		goodsEpDao.truncateEpCoupon();
//		log.info("4.1. EP쿠폰 정보 truncate");
//
//		// 4.2. EP쿠폰 정보 생성
//		cnt = goodsEpDao.createEpCoupon();
//		log.info("4.2. EP쿠폰 정보 생성: {}건", cnt);
//
//		// 5.1. EP무이자행사 정보 truncate
//		goodsEpDao.truncateEpInterestFreeEvent();
//		log.info("5.1. EP무이자행사 정보 truncate");
//
//		// 5.2. EP무이자행사 정보 생성
//		cnt = goodsEpDao.createEpInterestFreeEvent();
//		log.info("5.2. EP무이자행사 정보 생성: {}건", cnt);

		GoodsEp goodsEp = new GoodsEp();
		goodsEp.setGoodsDtlUrl(env.getProperty("ep.goods.dtl.url"));
		goodsEp.setEpType(epType);

		// 6.1. 이전 EP다음 정보 삭제
		goodsEpDao.deleteEpDaum("PREV");
		log.info("6.1. 이전 EP다음 정보 삭제");

		// 6.2. EP다음 이전 데이터로 백업
		goodsEpDao.createPreviousEpDaum();
		log.info("6.2. EP네이버 이전 데이터로 백업");

		// 6.3. 현재 EP다음 정보 삭제
		goodsEpDao.deleteEpDaum("CURR");
		log.info("6.3. 현재 EP다음 정보 삭제");

		// 6.4. EP다음 현재 데이터 생성
		int cnt = goodsEpDao.createCurrentEpDaum(goodsEp);
		log.info("6.4. EP다음 현재 데이터 생성: {}건", cnt);

		// 6.5. 최종 EP다음 정보 삭제
		goodsEpDao.deleteEpDaum("LAST");
		log.info("6.5. 최종 EP다음 정보 삭제");

		// 6.6. 최종 EP다음 생성
		cnt = goodsEpDao.createLastEpDaum(goodsEp);
		log.info("6.6. 최종 EP다음 생성: {}건", cnt);
	}

	/**
	 * 다음 EP 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 6. 16
	 */
	public Collection<GoodsEp> getDaumEpList() {
		return goodsEpDao.getDaumEpList();
	}

	/**
	 * 다음 EP 총건수
	 * @return
	 * @author gagamel
	 * @since 2021. 8. 26
	 */
	public int getDaumEpTotalCount() {
		return goodsEpDao.getDaumEpTotalCount();
	}

	/**
	 * 다음 EP 페이징 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 8. 26
	 */
	public Collection<GoodsEp> getDaumEpPagingList(GoodsEp goodsEp) {
		return goodsEpDao.getDaumEpPagingList(goodsEp);
	}

	/**
	 * 다음 상품평EP 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 6. 18
	 */
	public Collection<GoodsEp> getDaumReviewEpList() {
		return goodsEpDao.getDaumReviewEpList();
	}

}
