package com.style24.batch.biz.service;

import java.io.IOException;
import java.util.Collection;

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

import com.style24.batch.biz.dao.TsbGoodsDao;
import com.style24.batch.support.env.TsbConstants;
import com.style24.core.biz.service.TscEnvsetService;
import com.style24.core.biz.thirdparty.SafetyKoreaApi;
import com.style24.persistence.domain.Coupon;
import com.style24.persistence.domain.Goods;
import com.style24.persistence.domain.GoodsSafeNo;
import com.style24.persistence.domain.GoodsSummary;

import io.netty.util.internal.StringUtil;

import lombok.extern.slf4j.Slf4j;

import com.gagaframework.web.parameter.GagaMap;

/**
 * 상품 Service
 *
 * @author eskim
 * @since 2020. 11. 27
 */
@Service
@Slf4j
public class TsbGoodsService {

	@Autowired
	private TsbGoodsDao goodsDao;

	@Autowired
	private TscEnvsetService envsetService;

	@Autowired
	private SafetyKoreaApi safetyKoreaApi;


	/**
	 * 상품 타이틀예약 작업
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	@Transactional("shopTxnManager")
	public void saveGoodsTnmRsvt() {
		Goods goods = new Goods();

		// 1.예약기간 만료 상품 타이틀 작업
		// 1.1 이력쌓기
		goods.setProcJob("GTE"); // 상품타이틀예약 만료건 변경
		goods.setRegNo(TsbConstants.REG_NO);
		goods.setUpdNo(TsbConstants.REG_NO);
		goodsDao.createGoodsHst(goods);
		// 1.2 삼품타이틀 초기화
		goodsDao.updateGoodTnmInit();

		// 2.상품예약 종료처리
		goodsDao.updateGoodsTnmRes();

		// 3.예약도래 상품 타이틀 작업
		// 3.1 이력쌓기
		goods.setProcJob("GTS"); // 상품타이틀예약 예약 변경
		goodsDao.createGoodsHst(goods);
		// 3.2 상품타이틀 변경
		goodsDao.updateGoodsTnm();
	}

	/**
	 * 상품 가격예약 작업
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	@Transactional("shopTxnManager")
	public void saveGoodsPriceRsvt() {
		Goods goods = new Goods();

		// 1.예약기간 만료 상품 가격 작업
		// 1.1 이력쌓기
		goods.setProcJob("GPE"); // 상품 가격예약 만료건 변경
		goods.setRegNo(TsbConstants.REG_NO);
		goods.setUpdNo(TsbConstants.REG_NO);
		goodsDao.createGoodsHst(goods);
		// 1.2 삼품 가격 원복
		goodsDao.updateGoodPriceInit();

		// 2.상품예약 종료처리
		goodsDao.updateGoodsPriceRes();

		// 3.예약도래 상품 가격 작업
		// 3.1 이력쌓기
		goods.setProcJob("GPS"); // 상품 예약 가격 적용
		goodsDao.createGoodsHst(goods);
		// 3.2 상품 가격 변경
		goodsDao.updateGoodsPrice();
	}

	/**
	 * 상품 검색어 작업
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 11. 30
	 */
	@Transactional("shopTxnManager")
	public void updateGoodsSnm() {

		// 사용자 검색어 없는 상품 일괄 작업
		goodsDao.updateGoodsSnmByGoodsSnm1Null();
		// 사용자 검색어 있는 상품 작업
		Collection<Goods> goodsList = goodsDao.getGoodsByGooodsSnm1List();
		if (goodsList != null && !goodsList.isEmpty()) {
			for (Goods goods : goodsList) {

				// 사용자 검색어를 검색어에 적용
				String goodsSnm = goods.getGoodsSnm();
				String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
				StringBuilder tempGoodsSnm = new StringBuilder();
				for (String loopGoodsSnm : arrGoodsSnm) {
					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
						tempGoodsSnm.append(loopGoodsSnm).append(";");
					}
				}
				goods.setGoodsSnm(tempGoodsSnm.toString() + goodsSnm);
				goodsDao.updateGoodsSnm(goods);
			}
		}
	}

	/**
	 * 상품 즉시할인가 생성
	 *
	 * @param
	 * @return
	 * @author eskim
	 * @throws IOException
	 * @since 2020. 12. 02
	 */
	@Transactional("shopTxnManager")
	public void createGoodsBenefitPrice() throws IOException {

		// TB_GOODS_BENEFIT_PRICE_TEMP 삭제
		goodsDao.deleteGoodsBenefitPriceTemp();

		Coupon coupon = new Coupon();
		int floorUnit = 100; //envsetService.getPointUnit(TsbConstants.SiteCd.STYLE24.value());  // 나중에 수정해주세용!!!!!!!!!!!!!!!!!!!!
		coupon.setPointUnit(floorUnit);
		/*
		 * 쿠폰적용순선 전체->일반->임직원
		 *
		 * 테이블(TB_GOODS_BENEFIT_PRICE)은 전체기준으로만 생성
		 */
		coupon.setUsableCustGb("G100_00"); // 전체
		// TB_GOODS_BENEFIT_PRICE_TEMP 생성 - 상품쿠폰 전체
		goodsDao.crteateGoodsBenefitPriceTemp(coupon);

		// TB_GOODS_BENEFIT_PRICE_TEMP 생성 - 상품쿠폰 일반
		coupon.setUsableCustGb("G100_10"); // 일반
		goodsDao.updateGoodsBenefitPriceTemp(coupon);

		// TB_GOODS_BENEFIT_PRICE_TEMP 생성 - 상품쿠폰 임직원
		coupon.setUsableCustGb("G100_20"); // 임직원
		goodsDao.updateGoodsBenefitPriceTemp(coupon);

		// TB_GOODS_BENEFIT_PRICE 삭제
		goodsDao.deleteGoodsBenefitPrice();

		// TB_GOODS_BENEFIT_PRICE_TEMP => TB_GOODS_BENEFIT_PRICE
		goodsDao.createGoodsBenefitPrice();

	}

	/**
	 * 연관상품보기 스코어링 작업
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 12. 04
	 */
	@Transactional("shopTxnManager")
	public void createGoodsRelateScore(String workDt, String work7agoDt) {

		// 작업일 데이터 삭제
		goodsDao.deleteGoodsRelate(workDt);
		// 작업일 데이터 생성
		goodsDao.createGoodsRelate(workDt);
		// 7일전 데이터 삭제
		goodsDao.deleteGoodsRelate(work7agoDt);

	}

	/**
	 * 전시상품 통계정보작업
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 12. 04
	 */
	@Transactional("shopTxnManager")
	public void createGoodsSummary() {

		GoodsSummary goodsSummary = new GoodsSummary();

		goodsDao.deleteGoodsSummaryTemp();

		// 상품 판매수량-총판매수량
		goodsSummary.setColNm1("SELL_TOT_QTY");
		goodsSummary.setFromDay("");
		goodsDao.createGoodsSummaryBySale(goodsSummary);
		// 상품 판매수량-주간판매수량
		goodsSummary.setColNm1("SELL_WEEK_QTY");
		goodsSummary.setFromDay("7");
		goodsDao.createGoodsSummaryBySale(goodsSummary);
		// 상품 판매수량-월간판매수량
		goodsSummary.setColNm1("SELL_MONTH_QTY");
		goodsSummary.setFromDay("30");
		goodsDao.createGoodsSummaryBySale(goodsSummary);
		// 상품 판매수량-전일판매수량
		goodsSummary.setColNm1("SELL_YDAY_QTY");
		goodsSummary.setFromDay("1");
		goodsDao.createGoodsSummaryBySale(goodsSummary);
		// 상품 판매수량-15일간판매수량
		goodsSummary.setColNm1("SELL_DAY15_QTY");
		goodsSummary.setFromDay("15");
		goodsDao.createGoodsSummaryBySale(goodsSummary);
		// 상품 조회수-금주조회건수
		goodsSummary.setColNm1("READ_NWEEK_CNT");
		goodsSummary.setFromDay("1");
		goodsDao.createGoodsSummaryByView(goodsSummary);
		// 상품 조회수-금주조회건수
		goodsSummary.setColNm1("READ_PWEEK_CNT");
		goodsSummary.setFromDay("8");
		goodsDao.createGoodsSummaryByView(goodsSummary);
		// 상품평-상품평등록건수
		goodsSummary.setColNm1("REVIEW_REG_CNT");
		goodsSummary.setFromDay("");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
		// 상품평-텍스트상품평등록건수
		goodsSummary.setColNm1("RREVIEW_REG_CNT");
		goodsSummary.setFromDay("");
		goodsSummary.setPhotoYn("N");
		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
		// 상품평-포토상품평등록건수
		goodsSummary.setColNm1("PREVIEW_REG_CNT");
		goodsSummary.setFromDay("");
		goodsSummary.setPhotoYn("Y");
		goodsDao.createGoodsSummaryByReviewCount(goodsSummary);
		// 상품평-만족도점수
		goodsSummary.setColNm1("SCORE");
		goodsSummary.setReviewColNm("SCORE");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewSum(goodsSummary);
		// 상품평-사이즈점수
		goodsSummary.setColNm1("SCORE_SIZE1");
		goodsSummary.setColNm2("SCORE_SIZE2");
		goodsSummary.setColNm3("SCORE_SIZE3");
		goodsSummary.setReviewColNm("SCORE_SIZE");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-색상점수
		goodsSummary.setColNm1("SCORE_COLOR1");
		goodsSummary.setColNm2("SCORE_COLOR2");
		goodsSummary.setColNm3("SCORE_COLOR3");
		goodsSummary.setReviewColNm("SCORE_COLOR");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-핏점수
		goodsSummary.setColNm1("SCORE_FIT1");
		goodsSummary.setColNm2("SCORE_FIT2");
		goodsSummary.setColNm3("SCORE_FIT3");
		goodsSummary.setReviewColNm("SCORE_FIT");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-두께점수
		goodsSummary.setColNm1("SCORE_THICK1");
		goodsSummary.setColNm2("SCORE_THICK2");
		goodsSummary.setColNm3("SCORE_THICK3");
		goodsSummary.setReviewColNm("SCORE_THICK");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-무게점수
		goodsSummary.setColNm1("SCORE_WEIGHT1");
		goodsSummary.setColNm2("SCORE_WEIGHT2");
		goodsSummary.setColNm3("SCORE_WEIGHT3");
		goodsSummary.setReviewColNm("SCORE_WEIGHT");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-볼넓이점수
		goodsSummary.setColNm1("SCORE_BALL1");
		goodsSummary.setColNm2("SCORE_BALL2");
		goodsSummary.setColNm3("SCORE_BALL3");
		goodsSummary.setReviewColNm("SCORE_BALL");
		goodsSummary.setPhotoYn("");
		goodsDao.createGoodsSummaryByReviewScore(goodsSummary);
		// 상품평-상품문의
		goodsDao.createGoodsSummaryByCounsel(goodsSummary);

		// 전시상품 통계 저장
		goodsDao.saveGoodsSummary();

	}

	/**
	 * 영유아상품 인증번호 수신
	 *
	 * @return
	 * @author eskim
	 * @since 2020. 12. 04
	 */
	@Transactional("shopTxnManager")
	public void saveGoodsSafeNo() {

		// 1. 대상 상품 조회
		Collection<GoodsSafeNo> goodsSafeNoList = goodsDao.getGoodsSafeNoList();
		// 2. 인증테이블 적용
		for(GoodsSafeNo goodsSafeNo: goodsSafeNoList) {
			try {
				GagaMap result = safetyKoreaApi.getKoreaCertifyNo(goodsSafeNo.getGoodsNum()); // 품번으로 처리
				if (result != null || !StringUtil.isNullOrEmpty(result.get("certNum").toString())) {
					goodsSafeNo.setCertDt(result.get("certDt").toString());
					goodsSafeNo.setCertNum(result.get("certNum").toString());
					goodsSafeNo.setCertDiv(result.get("certDiv").toString());
					goodsSafeNo.setCertState(result.get("certState").toString());
					goodsSafeNo.setRegNo(TsbConstants.REG_NO);
					goodsSafeNo.setUpdNo(TsbConstants.REG_NO);
					goodsDao.saveGoodsSafeNo(goodsSafeNo);
				}
			} catch (Exception e) {
				// do nothing
			}
		}
	}

}
