package com.style24.core.biz.service;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;

import com.style24.core.biz.dao.TscEnvsetDao;
import com.style24.persistence.domain.Envset;
import com.style24.persistence.domain.Meta;

import lombok.extern.slf4j.Slf4j;

import com.gagaframework.web.util.GagaFileUtil;

/**
 * 환경설정 Service
 * 
 * @author gagamel
 * @since 2020. 10. 5
 */
@Service
@Slf4j
public class TscEnvsetService {

	@Autowired
	private TscEnvsetDao policyDao;

	@Autowired
	private Environment env;

	/**
	 * 사이트별 환경설정유형에 따른 환경설정 정보
	 * 정책은 중요한 정보로서 캐싱 문제 발생 시 심각해질 수 있으므로 캐싱처리 안 함(2020.10.5. gagamel)
	 * @param siteCd - 사이트코드
	 * @param envsetType - 환경설정유형
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
//	@Cacheable(value = "common", key = "'envset-'.concat(#siteCd).concat('-').concat(#envsetType)")
	public Envset getEnvset(String siteCd, String envsetType) {
		Envset params = new Envset();
		params.setSiteCd(siteCd);
		params.setEnvsetType(envsetType);

		Envset envset = policyDao.getEnvset(params);

//		if (envsetType.equals("C10")) {
//			if (StringUtils.isNotBlank(envset.getStrSetVal1())) {
//				envset.setStrSetNm1(marketingDao.getCouponName(envset.getStrSetVal1()));
//			}
//			if (StringUtils.isNotBlank(envset.getStrSetVal2())) {
//				envset.setStrSetNm2(marketingDao.getCouponName(envset.getStrSetVal2()));
//			}
//			if (StringUtils.isNotBlank(envset.getStrSetVal3())) {
//				envset.setStrSetNm3(marketingDao.getCouponName(envset.getStrSetVal3()));
//			}
//			if (StringUtils.isNotBlank(envset.getStrSetVal4())) {
//				envset.setStrSetNm4(marketingDao.getCouponName(envset.getStrSetVal4()));
//			}
//		}

		return envset;
	}

	/**
	 * 쇼핑몰 Meta 정보 가져오기
	 * @param siteCd - 사이트코드
	 * @author gagamel
	 * @since 2020. 6. 27
	 */
	@Cacheable(value = "metainfo")
	public Meta getMetaInfo(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "B10");

		Meta meta = new Meta();

		if (envset != null) {
			meta.setBrowserTitle(envset.getStrSetVal1());
			meta.setOgTitle(envset.getStrSetVal2());
			meta.setOgDesc(envset.getStrSetVal3());
			meta.setOgImage(StringUtils.isNotBlank(envset.getStrSetVal4()) ? GagaFileUtil.getConcatenationPath(env.getProperty("upload.image.view"), "envset", envset.getStrSetVal4()) : "");
			meta.setKeywords(envset.getStrSetVal5());
			meta.setFavicon(StringUtils.isNotBlank(envset.getStrSetVal6()) ? GagaFileUtil.getConcatenationPath(env.getProperty("upload.image.view"), "envset", envset.getStrSetVal6()) : "");
		}

		return meta;
	}

	/**
	 * 탈퇴 후 재가입불가일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getRejoinRejectDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 휴면회원선정일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getDormantMemberSelectDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 휴면회원전환일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getDormantMemberConvertDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * 구매포인트소멸기한(일) 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 25
	 */
	public int getBuyPointExpireDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C12");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 상품평포인트소멸기한(일) 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 25
	 */
	public int getGoodsReviewPointExpireDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C12");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 자사상품정상PC포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getSelfGoodsPcPointRate10(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal1());
	}

	/**
	 * 자사상품정상모바일포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getSelfGoodsMobPointRate10(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal2());
	}

	/**
	 * 자사상품이월PC포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getSelfGoodsPcPointRate20(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal3());
	}

	/**
	 * 자사상품이월모바일포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getSelfGoodsMobPointRate20(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal4());
	}

	/**
	 * 입점상품정상PC포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getEntrGoodsPcPointRate10(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal5());
	}

	/**
	 * 입점상품정상모바일포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getEntrGoodsMobPointRate10(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal6());
	}

	/**
	 * 입점상품이월PC포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getEntrGoodsPcPointRate20(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal7());
	}

	/**
	 * 입점상품이월모바일포인트율 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public float getEntrGoodsMobPointRate20(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C14");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal8());
	}

	/**
	 * 상품평등록가능일수 가져오기 (구매일로부터)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getGoodsReviewRegisterDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C15");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 텍스트/포토상품평 포인트지급방법 가져오기
	 * @param siteCd - 사이트코드
	 * @return 포인트지급방법 (A:승인후지급, D:즉시지급)
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public String getGoodsReviewPointGiveType(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C15");
		return (envset == null) ? "A" : envset.getStrSetVal2();
	}

	/**
	 * 텍스트상품평포인트 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public int getTextReviewPoint(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C15");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * 포토상품평포인트 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public int getPhotoReviewPoint(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C15");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal4());
	}

//	/**
//	 * 최초텍스트상품평포인트 가져오기
//	 * @param siteCd - 사이트코드
//	 * @return
//	 * @author gagamel
//	 * @since 2020. 10. 21
//	 */
//	public int getFirstTextReviewPoint(String siteCd) {
//		Envset envset = this.getEnvset(siteCd, "C15");
//		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal5());
//	}
//
//	/**
//	 * 최초포토상품평포인트 가져오기
//	 * @param siteCd - 사이트코드
//	 * @return
//	 * @author gagamel
//	 * @since 2020. 10. 21
//	 */
//	public int getFirstPhotoReviewPoint(String siteCd) {
//		Envset envset = this.getEnvset(siteCd, "C15");
//		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal6());
//	}

	/**
	 * 베스트상품평포인트 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 21
	 */
	public int getBestReviewPoint(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C15");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal5());
	}

	/**
	 * 포인트사용기준금액(원) 가져오기 (결제액 기준)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 25
	 */
	public int getPointUseBaseAmt(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C17");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 최대사용가능포인트율(%) 가져오기 (결제액 기준)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 25
	 */
	public float getMaxUsablePoint(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "C17");
		return (envset == null) ? 0.0f : Float.parseFloat(envset.getStrSetVal2());
	}

	/**
	 * 상품평노출여부 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public String getGoodsReviewDisplayYn(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G10");
		return (envset == null) ? "N" : envset.getStrSetVal1();
	}

	/**
	 * 품절상품노출여부 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public String getSoldoutGoodsDisplayYn(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G10");
		return (envset == null) ? "N" : envset.getStrSetVal2();
	}

	/**
	 * 베스트상품노출개수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getBestGoodsDisplayCount(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * 장바구니보관일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getCartStoreDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G11");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 장바구니담기최대상품수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getCartPutMaxGoodsCount(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G11");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 위시리스트보관일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getWishlistStoreDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "G11");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * 결제단위 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getPayUnit(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 최소결제금액 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getMinPayAmt(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 총알배송주문가능시간 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getShotDeliveryOrderableTimes(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal4());
	}

	/**
	 * 품절안내방법 가져오기
	 * @param siteCd - 사이트코드
	 * @return 품절안내방법(A:자동, M:수동)
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public String getSoldoutGuideMethod(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O11");
		return (envset == null) ? "M" : envset.getStrSetVal1();
	}

	/**
	 * 자동 품절안내메시지발송일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getAutoSoldoutGuideMessageSendDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O11");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 자동 품절메시지발송일수 가져오기
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getAutoSoldoutMessageSendDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "O11");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * 자동 배송완료처리일수 가져오기 (배송중 상태 기준)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getAutoDeliveryCompleteDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "D10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal1());
	}

	/**
	 * 자동 구매확정처리일수 가져오기 (배송완료일 기준)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getAutoBuyConfirmDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "D10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal2());
	}

	/**
	 * 반품가능기간일수 가져오기 (배송완료일 기준)
	 * @param siteCd - 사이트코드
	 * @return
	 * @author gagamel
	 * @since 2021. 2. 24
	 */
	public int getReturnableDays(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "D10");
		return (envset == null) ? 0 : Integer.parseInt(envset.getStrSetVal3());
	}

	/**
	 * AOS 앱버전 가져오기
	 * @param siteCd - 사이트코드
	 * @return String - 버전
	 * @author gagamel
	 * @since 2020. 4. 20
	 */
	public String getAosAppVersion(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "M10");
		return envset.getStrSetVal1();
	}

	/**
	 * IOS 앱버전 가져오기
	 * @param siteCd - 사이트코드
	 * @return String - 버전
	 * @author gagamel
	 * @since 2020. 4. 20
	 */
	public String getIosAppVersion(String siteCd) {
		Envset envset = this.getEnvset(siteCd, "M10");
		return envset.getStrSetVal2();
	}

}
