package com.style24.batch.biz.task;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.style24.batch.biz.job.goods.TsbGoodsBenefitPriceJob;
import com.style24.batch.biz.job.goods.TsbGoodsInfantsSafeNoJob;
import com.style24.batch.biz.job.goods.TsbGoodsPriceJob;
import com.style24.batch.biz.job.goods.TsbGoodsRelateScoreJob;
import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
import com.style24.batch.biz.job.goods.TsbGoodsSummaryJob;
import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;

import lombok.extern.slf4j.Slf4j;

/**
 * 상품 Task
 * @author eskim
 * @since 2020. 11. 27
 */
@Component
@Slf4j
public class TsbGoodsTask {

	@Autowired
	private TsbGoodsTnmJob goodsTnmJob;

	@Autowired
	private TsbGoodsPriceJob goodsPriceJob;

	@Autowired
	private TsbGoodsSnmJob goodsSnmJob;

	@Autowired
	private TsbGoodsBenefitPriceJob goodsBenefitPriceJob;

	@Autowired
	private TsbGoodsRelateScoreJob goodsRelateScoreJob;

	@Autowired
	private TsbGoodsSummaryJob goodsSummaryJob;

	@Autowired
	private TsbGoodsInfantsSafeNoJob goodsInfantsSafeNoJob;


	/**
	 * 초 분 시 일 월 주(년)
	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
	 * 0 15 10 ? * *" : 모든 요일, 매월, 아무 날이나 10:15:00
	 * 0 15 10 * * ?" : 아무 요일, 매월, 매일 10:15:00
	 * 0 15 10 * * ? *" : 모든 연도, 아무 요일, 매월, 매일 10:15
	 * 0 15 10 * * ? : 2005" 2005년 아무 요일이나 매월, 매일 10:15
	 * 0 * 14 * * ?" : 아무 요일, 매월, 매일, 14시 매분 0초
	 * 0 0/5 14 * * ?" : 아무 요일, 매월, 매일, 14시 매 5분마다 0초
	 * 0 0/5 14,18 * * ?" : 아무 요일, 매월, 매일, 14시, 18시 매 5분마다 0초
	 * 0 0-5 14 * * ?" : 아무 요일, 매월, 매일, 14:00 부터 매 14:05까지 매 분 0초
	 * 0 10,44 14 ? 3 WED" : 3월의 매 주 수요일, 아무 날짜나 14:10:00, 14:44:00
	 * 0 15 10 ? * MON-FRI" : 월~금, 매월, 아무 날이나 10:15:00
	 * 0 15 10 15 * ?" : 아무 요일, 매월 15일 10:15:00
	 * 0 15 10 L * ?" : 아무 요일, 매월 마지막 날 10:15:00
	 * 0 15 10 ? * 6L" : 매월 마지막 금요일 아무 날이나 10:15:00
	 * 0 15 10 ? * 6L 2002-2005" : 2002년부터 2005년까지 매월 마지막 금요일 아무 날이나 10:15:00
	 * 0 15 10 ? * 6#3" : 매월 3번째 금요일 아무 날이나 10:15:00
	 *
	 * @throws Exception
	 */

	/**
	 * 상품 타이틀예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.titlename.reserve}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsTnmJob() throws Exception {
		goodsTnmJob.runById("cron.goods.titlename.reserve");
	}

	/**
	 * 상품 가격예약 적용 주기 : 시간배치 - 매시 1분 (소셜과 시간 중복)
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.price.reserve}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsPriceJob() throws Exception {
		goodsPriceJob.runById("cron.goods.price.reserve");
	}

	/**
	 * 상품 검색어 적용 주기 : 시간배치 - 매시 5분
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.search.keyword}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsSnmJob() throws Exception {
		goodsSnmJob.runById("cron.goods.search.keyword");
	}

	/**
	 * 상품 즉시할인가 생성 : 시간배치 - 매시 2분
	 *
	 * @throws Exception
	 * @author eskim
	 * @since 2020. 12. 02.
	 */
	@Scheduled(cron = "${cron.goods.benefit.price}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsBenefitPriceJob() throws Exception {
		goodsBenefitPriceJob.runById("cron.goods.benefit.price");
	}

	/**
	 * 연관상품보기 스코어링 주기 : 일배치 - 매일 2시
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.relate.score}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsRelateScoreJob() throws Exception {
		goodsRelateScoreJob.runById("cron.goods.relate.score");
	}

	/**
	 * 전시상품 통계정보 주기 : 일배치 - 매일 1시 5분
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.summary}")
	//@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsSummaryJob() throws Exception {
		goodsSummaryJob.run("cron.goods.summary");
	}

	/**
	 * 영유아상품 인증번호 수신 : 일배치 - 매일 3시 5분
	 *
	 * @throws Exception
	 */
	@Scheduled(cron = "${cron.goods.infants.safe}")
	@Scheduled(fixedDelay = 3500000)
	@Async
	public void tsbGoodsInfantsSafeNoJob() throws Exception {
		goodsInfantsSafeNoJob.run("cron.goods.infants.safe");
	}


}
