package com.style24.admin.biz.service;

import java.util.ArrayList;
import java.util.Collection;

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

import com.style24.admin.biz.dao.TsaRendererDao;
import com.style24.persistence.domain.Brand;
import com.style24.persistence.domain.Color;
import com.style24.persistence.domain.CommonCode;
import com.style24.persistence.domain.DeliveryLoc;
import com.style24.persistence.domain.DelvFeePolicy;
import com.style24.persistence.domain.Itemkind;
import com.style24.persistence.domain.SupplyCompany;

import lombok.extern.slf4j.Slf4j;

/**
 * 콤보박스, 체크박스, 라디오버튼 구성 시 필요한 Renderer Service
 *
 * @author gagamel
 * @since 2020. 10. 7
 */
@Service
@Slf4j
public class TsaRendererService {

	@Autowired
	private TsaRendererDao rendererDao;

	/**
	 * 연도 목록
	 * @param startYear - 시작연도
	 * @param startOffset - Start offset. 시작연도
	 * @param endOffset - End offset. 종료연도
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 22.
	 */
	public Collection<CommonCode> getYearList(int startYear, int startOffset, int endOffset) {
		Collection<CommonCode> yearList = new ArrayList<>();

		int start = startYear + startOffset;
		int end = startYear + endOffset;

		for (int year = start; year <= end; year++) {
			CommonCode commonCode = new CommonCode();

			commonCode.setCd(String.valueOf(year));
			commonCode.setCdNm(String.valueOf(year));

			yearList.add(commonCode);
		}

		return yearList;
	}

	/**
	 * 공급업체 목록
	 * @param supplyCompany - 공급업체 정보
	 * @return 공급업체 목록
	 * @author Daehyoung
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getSupplyCompanyList(SupplyCompany supplyCompany) {
		return rendererDao.getSupplyCompanyList(supplyCompany);
	}

	/**
	 * 공급업체 목록
	 * @return 공급업체 목록
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getSupplyCompanyList() {
		return this.getSupplyCompanyList(new SupplyCompany());
	}

	/**
	 * 공급업체 목록
	 * @param supplyCompCd - 공급업체코드
	 * @return 공급업체 목록
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getSupplyCompanyList(String supplyCompCd) {
		SupplyCompany supplyCompany = new SupplyCompany();
		supplyCompany.setSupplyCompCd(supplyCompCd);
		return this.getSupplyCompanyList(supplyCompany);
	}

	/**
	 * 공급업체 목록
	 * @param supplyCompCd - 공급업체코드
	 * @param selfYn - 자사여부
	 * @return 공급업체 목록
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getSupplyCompanyList(String supplyCompCd, String selfYn) {
		SupplyCompany supplyCompany = new SupplyCompany();
		supplyCompany.setSupplyCompCd(supplyCompCd);
		supplyCompany.setSelfYn(selfYn);
		return this.getSupplyCompanyList(supplyCompany);
	}

	/**
	 * 자사공급업체 목록
	 * @return 자사공급업체 목록
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getSelfSupplyCompanyList() {
		SupplyCompany supplyCompany = new SupplyCompany();
		supplyCompany.setSelfYn("Y");
		return this.getSupplyCompanyList(supplyCompany);
	}

	/**
	 * 입점공급업체 목록
	 * @return 입점공급업체 목록
	 * @author gagamel
	 * @since 2020. 11. 4
	 */
	public Collection<CommonCode> getEntrSupplyCompanyList() {
		SupplyCompany supplyCompany = new SupplyCompany();
		supplyCompany.setSelfYn("N");
		return this.getSupplyCompanyList(supplyCompany);
	}

	/**
	 * 공통코드 목록 - 어드민 공통코드 캐시 미적용 - 상품등록시 시즌년도 캐쉬로 인한 정보 오류로 수정 2020.06.02
	 * @param commoncode - 공통코드 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
//	@Cacheable(value = "common", key = "'commoncode-'.concat(#commoncode.cdGb)")
	public Collection<CommonCode> getCommonCodeList(CommonCode commoncode) {
		return rendererDao.getCommonCodeList(commoncode);
	}

	/**
	 * 공통코드 목록
	 * @param cdGb - 코드구분
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getCommonCodeList(String cdGb) {
		CommonCode commoncode = new CommonCode();
		commoncode.setCdGb(cdGb);
		return this.getCommonCodeList(commoncode);
	}

	/**
	 * 공통코드 목록
	 * @param grpCodeId - 코드구분
	 * @param useYn     - 사용여부
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getCommonCodeList(String cdGb, String useYn) {
		CommonCode commoncode = new CommonCode();
		commoncode.setCdGb(cdGb);
		commoncode.setUseYn(useYn);
		return this.getCommonCodeList(commoncode);
	}

	/**
	 * 현재 유효한 공통코드 목록
	 * @param cdGb - 코드구분
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getAvailCommonCodeList(String cdGb) {
		return this.getCommonCodeList(cdGb, "Y");
	}

	/**
	 * 공통코드 목록
	 * @param cdGb   -코드구분
	 * @param useYn  - 사용여부
	 * @param cdDesc - 코드설명
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getCommonCodeList(String cdGb, String useYn, String cdDesc) {
		CommonCode commoncode = new CommonCode();
		commoncode.setCdGb(cdGb);
		commoncode.setUseYn(useYn);
		commoncode.setCdDesc(cdDesc);
		return this.getCommonCodeList(commoncode);
	}

	/**
	 * 공통코드 목록
	 * @param cdGb      -코드구분
	 * @param useYn     - 사용여부
	 * @param exceptCds - 제외코드배열
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getCommonCodeList(String cdGb, String useYn, String[] exceptCds) {
		CommonCode commoncode = new CommonCode();
		commoncode.setCdGb(cdGb);
		commoncode.setUseYn(useYn);
		commoncode.setExceptCds(exceptCds);
		return this.getCommonCodeList(commoncode);
	}

	/**
	 * 최상위메뉴 목록
	 * @param menuId - 메뉴ID
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getTopMenuList(String menuId) {
		return rendererDao.getTopMenuList(menuId);
	}

	/**
	 * 전체 메뉴 목록
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	public Collection<CommonCode> getAllMenuList() {
		return rendererDao.getAllMenuList();
	}

	/**
	 * 벤더외부몰 목록
	 * @param vendorId - 벤더ID
	 * @return 벤더외부몰 목록
	 * @author gagamel
	 * @since 2021. 7. 5
	 */
	public Collection<CommonCode> getVendorExtmallList(String vendorId) {
		return rendererDao.getVendorExtmallList(vendorId);
	}

//	/**
//	 * 벤더외부몰판매매장 목록
//	 * @param vendorId - 벤더ID
//	 * @return
//	 * @author gagamel
//	 * @since 2020. 4. 28
//	 */
//	public Collection<CommonCode> getVendorExtmallSellStoreList(String vendorId) {
//		return rendererDao.getVendorExtmallSellStoreList(vendorId);
//	}
//
//	//
//	//	/**
//	//	 * 유효한 브랜드 목록
//	//	 * @param
//	//	 * @return
//	//	 * @author qkwlstktma
//	//	 * @since 2019. 8. 25
//	//	 */
//	//	public Collection<CommonCode> getAvailableBrandList() {
//	//		AdmBrand brand = new AdmBrand();
//	//		brand.setUseYn("Y");
//	//		return rendererDao.getBrandList(brand);
//	//	}
//	//

	/**
	 * 브랜드 목록
	 * @param
	 * @return
	 * @author eskim
	 * @since 2021. 01. 26
	 */
	public Collection<CommonCode> getBrandList(Brand brand) {
		return rendererDao.getBrandList(brand);
	}

	/**
	 * 공급업체 브랜드 목록
	 * @param supplyCompCd - 공급업체코드
	 * @return
	 * @author gagamel
	 * @since 2019. 10. 20
	 */
	public Collection<CommonCode> getSupplyCompanyBrandList(String supplyCompCd) {
		Brand brand = new Brand();
		brand.setSupplyCompCd(supplyCompCd);
		return rendererDao.getBrandList(brand);
	}

//
//	/**
//	 * 브랜드그룹별 브랜드 목록
//	 * @param brandGrpNm - 브랜드그룹명
//	 * @return
//	 * @author gagamel
//	 * @since 2020. 1. 10
//	 */
//	public Collection<CommonCode> getGroupBrandList(String brandGrpNm) {
//		AdmBrand brand = new AdmBrand();
//		brand.setBrandGrpNm(brandGrpNm);
//		return rendererDao.getBrandList(brand);
//	}
//
	/**
	 * 권한별 브랜드 목록
	 * @param adminId - 사용자ID
	 * @return
	 * @author eskim
	 * @since 2019. 6. 17
	 */
	public Collection<CommonCode> getAuthBrandList(int userNo) {
		return rendererDao.getAuthBrandList(userNo);
	}

	/**
	 * 출고처 목록
	 * @param delvLoc - 출고처 정보
	 * @return 출고처 목록
	 * @author gagamel
	 * @since 2020. 11. 4
	 */
	public Collection<CommonCode> getDeliveryLocList(DeliveryLoc delvLoc) {
		return rendererDao.getDeliveryLocList(delvLoc);
	}

	/**
	 * 출고처 자사 전체 목록
	 * @param delvLoc - 출고처 정보
	 * @return 출고처 목록
	 * @author gagamel
	 * @since 2020. 11. 4
	 */
	public Collection<CommonCode> getDeliveryLocAllList() {
		return rendererDao.getDeliveryLocAllList();
	}
	
	
	
//	/**
//	 * 출고처 목록
//	 * @return 출고처 목록
//	 * @author gagamel
//	 * @since 2019. 12. 12
//	 */
//	public Collection<CommonCode> getDeliveryLocList() {
//		AdmDeliveryLoc params = new AdmDeliveryLoc();
//		return this.getDeliveryLocList(params);
//	}

	/**
	 * 출고처 목록
	 * @param supplyCompCd - 공급업체코드
	 * @return 출고처 목록
	 * @author gagamel
	 * @since 2020. 11. 4
	 */
	public Collection<CommonCode> getDeliveryLocList(String supplyCompCd) {
		DeliveryLoc delvLoc = new DeliveryLoc();
		delvLoc.setSupplyCompCd(supplyCompCd);
		return this.getDeliveryLocList(delvLoc);
	}

	/**
	 * 배송비정책 목록
	 * @param supplyCompCd - 공급업체코드
	 * @return 배송비정책 목록
	 * @author eskim
	 * @since 2020. 11. 24
	 */
	public Collection<CommonCode> getSupplyDeliveryFeePolicyList(String supplyCompCd) {
		return rendererDao.getSupplyDeliveryFeePolicyList(supplyCompCd);
	}
	
	/**
	 * 업체별 배송비정책 목록(정책명)
	 * @param supplyCompCd - 공급업체코드
	 * @return 배송비정책 목록
	 * @author eskim
	 * @since 2021. 07. 19
	 */
	public Collection<DelvFeePolicy> getSupplyDeliveryPolicyList(String supplyCompCd) {
		return rendererDao.getSupplyDeliveryPolicyList(supplyCompCd);
	}

//	/**
//	 * 직송매장 목록
//	 * @return
//	 * @author gagamel
//	 * @since 2020. 5. 4
//	 */
//	public Collection<CommonCode> getDirectStoreList() {
//		AdmDeliveryLoc params = new AdmDeliveryLoc();
//		params.setDelvLocClsf("21"); // 직송매장
//		return this.getDeliveryLocList(params);
//	}
//
//	//	/**
//	//	 * 정보고시 목록
//	//	 * @param goodsCd - 상품코드
//	//	 * @return
//	//	 * @author jaewonHo
//	//	 * @param supplyCompCd
//	//	 * @since 2019. 10. 24
//	//	 */
//	//	public Collection<CommonCode> getCateInfoList(String goodsCd) {
//	//		return rendererDao.getCateInfoList(goodsCd);
//	//	}
//
	/**
	 * 품목 목록
	 * @return 품목 목록
	 * @author eskim
	 * @since 2020. 10. 19
	 */
	public Collection<CommonCode> getAllItemkindList() {
		Itemkind itemkind = new Itemkind();
		return this.getItemkindList(itemkind);
	}

	/**
	 * 품목 목록
	 * @param itemkind - 품목 정보
	 * @return 품목 목록
	 * @author eskim
	 * @since 2020. 10. 19
	 */
	public Collection<CommonCode> getItemkindList(Itemkind itemkind) {
		return rendererDao.getItemkindList(itemkind);
	}

//	/**
//	 * 브랜드그룹 목록
//	 * @return 브랜드그룹 목록
//	 * @author eskim
//	 * @since 2019. 12. 10
//	 */
//	public Collection<CommonCode> getBrandGroupList() {
//		return rendererDao.getBrandGroupList();
//	}
//
	/**
	 * 컬러 목록
	 * @param color - 색상 정보
	 * @return 컬러 목록
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	public Collection<CommonCode> getColorList(Color color) {
		return rendererDao.getColorList(color);
	}

//
//	/**
//	 * 사용중 대카테고리 목록
//	 * @param cateGb - 카테고리구분
//	 * @return 대카테고리 목록
//	 * @author sasa004
//	 * @since 2020. 01. 02
//	 */
//	public Collection<CommonCode> getTCategoryList(String cateGb) {
//		return rendererDao.getTCategoryList(cateGb);
//	}
//
	/**
	 * 브랜드에 등록된 MD 목록
	 * @return MD 목록
	 * @author eskim
	 * @since 2020. 10. 19
	 */
	public Collection<CommonCode> getBrandMdList() {
		return rendererDao.getBrandMdList();
	}

	/**
	 * 택배사명 목록 조회
	 * @return CommonCode
	 * @author moon
	 * @since 2020. 11. 05
	 */
	public Collection<CommonCode> getShipCompanyList() {
		CommonCode data = new CommonCode();
		data.setUseYn("Y");
		return rendererDao.getShipCompanyList(data);
	}
//
//	/**
//	 * MD 별 브랜드 목록 조회
//	 * @param mdId - 담당MD아이디
//	 * @return CommonCode
//	 * @author jaewonHo
//	 * @since 2020. 02. 11
//	 */
//	public Collection<CommonCode> getMdBrandList(String mdId) {
//		return rendererDao.getMdBrandList(mdId);
//	}
//
//	/**
//	 * MD 별 브랜드 목록 조회
//	 * @param mdId - 담당MD아이디
//	 * @return CommonCode
//	 * @author jaewonHo
//	 * @since 2020. 02. 11
//	 */
//	public Collection<CommonCode> getMdBrandGrpList(String mdId) {
//		return rendererDao.getMdBrandGrpList(mdId);
//	}
//
//	/**
//	 * 인스타그램 계정리스트 조회
//	 * @return
//	 * @since : 2020. 3. 18.
//	 * @authur 이명철
//	 */
//	public Collection<CommonCode> getInstaAccount() {
//		return rendererDao.getInstaAccount();
//	}
//
//	/**
//	 * 판매몰조회
//	 * @param
//	 * @return CommonCode
//	 * @author swkim
//	 * @since 2020. 03. 19
//	 */
//	public Collection<CommonCode> getSellStoreList() {
//		return rendererDao.getSellStoreList();
//	}

	/**
	 * 문의용 답변문구 목록
	 * @param ansClsf - 답변종류
	 * @return CommonCode
	 * @author gagamel
	 * @since 2020. 12. 24
	 */
	public Collection<CommonCode> getQnaAnswerPhaseList(String ansClsf) {
		return rendererDao.getQnaAnswerPhaseList(ansClsf);
	}

	/**
	 * 색상그룹코드 RGB 목록
	 *
	 * @param
	 * @return
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	public Collection<CommonCode> getColorGrpCdRgbList() {
		return rendererDao.getColorGrpCdRgbList();
	}

	/**
	 * 전체 제휴채널 목록
	 * @return
	 * @author gagamel
	 * @since 2021. 1. 20
	 */
	public Collection<CommonCode> getAllAflinkList() {
		return rendererDao.getAllAflinkList();
	}

	/**
	 * 제휴채널 목록
	 * @param afChannel - 상위제휴채널
	 * @return
	 * @author gagamel
	 * @since 2021. 1. 20
	 */
	public Collection<CommonCode> getAflinkList(String afChannel) {
		return rendererDao.getAflinkList(afChannel);
	}

	/**
	 * 자사브랜드 조회
	 * @param
	 * @return
	 * @author gagamel
	 * @since 2021. 1. 8
	 */
	public Collection<CommonCode> getSelfBrandList() {
		return rendererDao.getSelfBrandList();
	}

	/**
	 * poll 질문유형 조회
	 * @param
	 * @return
	 * @author sowon
	 * @since 2021. 2. 19
	 */
	public Collection<CommonCode> getPollQtypeList() {
		return rendererDao.getPollQtypeList();
	}

	/**
	 * 카테고리1 조회
	 * @param
	 * @return
	 * @author bin2107
	 * @since 2021. 3. 3
	 */
	public Collection<CommonCode> getCate1List() {
		return rendererDao.getCate1List();
	}

	/**
	 * 자사 브랜드 그룹 조회
	 * @param
	 * @return
	 * @author bin2107
	 * @since 2021. 3. 4
	 */
	public Collection<CommonCode> getSelfBrandGroupList() {
		return rendererDao.getSelfBrandGroupList();
	}

	/**
	 * 업체별 출고처 목록
	 * @param supplyCompCd - 공급업체코드
	 * @return 업체별 출고처 목록
	 * @author eskim
	 * @since 2021. 07. 4
	 */
	public Collection<CommonCode> getSupplyDeliveryLocList(String supplyCompCd) {
		return rendererDao.getSupplyDeliveryLocList(supplyCompCd);
	}
}
