package com.style24.batch.biz.service;

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.TsbGoodsSearchDao;

import lombok.extern.slf4j.Slf4j;

/**
 * 상품 검색 Service
 *
 * @author eskim
 * @since 2021. 06. 08
 */
@Service
@Slf4j
public class TsbGoodsSearchService {

	@Autowired
	private TsbGoodsSearchDao goodsSearchDao;

	@Autowired
	private Environment env;

	/**
	 * 상품검색 작업 - 전체색인
	 *
	 * @return
	 * @author eskim
	 * @since 2021. 06. 08
	 */
	@Transactional("shopTxnManager")
	public void saveGoodsSearchAll() {

		// 세션 설정
		goodsSearchDao.updateSessionGroupConcat();

		// TB_GOODS_SEARCH_TEMP 삭제
		goodsSearchDao.deleteGoodsSearchTemp();

		// 기본상품정보 생성
		goodsSearchDao.createGoodsSearchTempByGoods("A");

		// 키워드 생성
		goodsSearchDao.updateGoodsSearchTempByKeyword();

		// 상품이미지 생성
		String goodsPath = env.getProperty("upload.goods.view");
		goodsSearchDao.updateGoodsSearchTempByImage(goodsPath);

		// 동영상 생성
		goodsSearchDao.updateGoodsSearchTempByVideo();

		// 즉시적용가 생성
		goodsSearchDao.updateGoodsSearchTempByPrice();

		// 아이콘 생성
		goodsSearchDao.updateGoodsSearchTempByIcon();

		// 전시 카테고리 생성
		goodsSearchDao.updateGoodsSearchTempByCate();

		// 자사 옵션정보 생성
		goodsSearchDao.updateGoodsSearchTempBySelfOpt();

		// 자사 옵션별 색상칩 생성
		goodsSearchDao.updateGoodsSearchTempBySelfColor();

		// 자사 입점정보 생성
		goodsSearchDao.updateGoodsSearchTempBySelfNoOpt();

		// TB_GOODS_SEARCH 삭제
		goodsSearchDao.deleteGoodsSearch();

		// TB_GOODS_SEARCH 생성
		goodsSearchDao.createGoodsSearch();

	}

	/**
	 * 상품검색 작업 - 부분색인(가격,재고,상품상태,타이틀,혜택(딱지))
	 *
	 * @return
	 * @author eskim
	 * @since 2021. 06. 13
	 */
	@Transactional("shopTxnManager")
	public void saveGoodsSearchSection() {

		// 변경상품 코드 수집 - TB_GOODS_SEARCH_SECTION_TEMP

		// 세션 설정
		goodsSearchDao.updateSessionGroupConcat();

		// TB_GOODS_SEARCH_SECTION_TEMP 삭제
		goodsSearchDao.deleteGoodsSearchSectionTemp();

		//신규상품
		goodsSearchDao.createGoodsSearchSectionTempByGoods();

		//가격변경건 - 판매가, 즉시적용쿠폰
		goodsSearchDao.saveGoodsSearchSectionTempByPrice();
		goodsSearchDao.saveGoodsSearchSectionTempByCoupon();

		//재고수량변경
		goodsSearchDao.updateGoodsSearchSectionTempByStock();

		//재고변경건
		goodsSearchDao.saveGoodsSearchSectionTempBySelfOpt();
		goodsSearchDao.saveGoodsSearchSectionTempBySelfNoOpt();

		//타이틀변경건
		goodsSearchDao.saveGoodsSearchSectionTempByTitle();

		//혜택 변경건
		goodsSearchDao.saveGoodsSearchSectionTempByBenefit();

		//전시 카테고리 변경건 -- 운영에서 실행시간 테스트 요
		//goodsSearchDao.saveGoodsSearchSectionTempByCate();

		//상품상태변경건 - 상품상태, 판매기간,자사노출여부, 상품전시재고 <==마지막 순서
		goodsSearchDao.saveGoodsSearchSectionTempByStat();

		// 부분색인 데이터 생성
		createGoodsSearchSection();

	}

	/**
	 * 상품검색 작업 - 부분색인 데이터 생성
	 *
	 * @author eskim
	 * @since 2021. 06. 13
	 */
	private void createGoodsSearchSection() {

		// TB_GOODS_SEARCH_TEMP 삭제
		goodsSearchDao.deleteGoodsSearchTemp();

		// 기본상품정보 생성
		goodsSearchDao.createGoodsSearchTempByGoods("S");

		// 키워드 생성
		goodsSearchDao.updateGoodsSearchTempByKeyword();

		// 상품이미지 생성
		String goodsPath = env.getProperty("upload.goods.view");
		goodsSearchDao.updateGoodsSearchTempByImage(goodsPath);

		// 동영상 생성
		goodsSearchDao.updateGoodsSearchTempByVideo();

		// 즉시적용가 생성
		goodsSearchDao.updateGoodsSearchTempByPrice();

		// 아이콘 생성
		goodsSearchDao.updateGoodsSearchTempByIcon();

		// 전시 카테고리 생성
		goodsSearchDao.updateGoodsSearchTempByCate();

		// 자사 옵션정보 생성
		goodsSearchDao.updateGoodsSearchTempBySelfOpt();

		// 자사 옵션별 색상칩 생성
		goodsSearchDao.updateGoodsSearchTempBySelfColor();

		// 입점정보 생성
		goodsSearchDao.updateGoodsSearchTempBySelfNoOpt();

		// 삭제건 생성
		goodsSearchDao.updateGoodsSearchSectionByDel();

		// TB_GOODS_SEARCHS_SECTION 삭제
		goodsSearchDao.deleteGoodsSearchSection();

		// TB_GOODS_SEARCHS_SECTION 생성
		goodsSearchDao.createGoodsSearchSection();

		// 부분색인 상품정보 전체색인 에 적용 - PROC_GB: C
		goodsSearchDao.updateGoodsSearchAll();

		// 부분색인 상품정보 전체색인 에 적용 - PROC_GB: D
		goodsSearchDao.updateGoodsSearchAllDel();


	}

}
