package com.style24.front.biz.dao;

import java.util.Collection;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.CardPromotion;
import com.style24.persistence.domain.Cate4Srch;
import com.style24.persistence.domain.Delivery;
import com.style24.persistence.domain.Freegift;
import com.style24.persistence.domain.Goods;
import com.style24.persistence.domain.GoodsCompose;
import com.style24.persistence.domain.GoodsContents;
import com.style24.persistence.domain.GoodsDesc;
import com.style24.persistence.domain.GoodsImg;
import com.style24.persistence.domain.GoodsNotiInfo;
import com.style24.persistence.domain.GoodsSafeNo;
import com.style24.persistence.domain.GoodsSearch;
import com.style24.persistence.domain.GoodsStock;
import com.style24.persistence.domain.GoodsVideo;
import com.style24.persistence.domain.GoodsViewHst;
import com.style24.persistence.domain.Measurement;
import com.style24.persistence.domain.Notice;
import com.style24.persistence.domain.ReinboundInform;
import com.style24.persistence.domain.SizeInfo;
import com.style24.persistence.domain.Tmtb;
import com.style24.persistence.domain.eigene.Item;
import com.style24.persistence.domain.searchengine.SearchEngine;

/**
 * 상품 Dao
 *
 * @author gagamel
 * @since 2020. 12. 29
 */
@ShopDs
public interface TsfGoodsDao {

	/**
	 * 상품 상세보기 이력 생성
	 *
	 * @param goodsViewHst
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	void createGoodsViewHst(GoodsViewHst goodsViewHst);

	/**
	 * 상품 네비게이션 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Cate4Srch getGoodsNavigation(Goods goods);

	/**
	 * 상품 이미지 정보
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Collection<GoodsImg> getGoodsImgList(Goods goods);

	/**
	 * 상품 동영상정보
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Collection<GoodsVideo> getVideoList(GoodsVideo goodsVideo);

	/**
	 * 상품 정보 조회
	 * @param goods
	 * @return
	 * @author xodud1202
	 * @since 2021. 01. 28
	 */
	Goods getGoodsInfo(Goods goods);

	/**
	 * 상품 간단 조회
	 * @param goods
	 * @return
	 * @author xodud1202
	 * @since 2021. 05. 24
	 */
	Goods getGoodsSimpleInfo(Goods goods);

	/**
	 * 세트상품 구성 상품 정보 조회
	 * @param param
	 * @return
	 * @author xodud1202
	 * @since 2021. 05. 24
	 */
	Collection<Goods> getOrderGoodsOptionList(Goods param);

	/**
	 * 사은품 구성 상품 정보 조회
	 * @param goods
	 * @return
	 * @author xodud1202
	 * @since 2021. 01. 28
	 */
	Goods getGoodsCompsInfo(Goods goods);

	/**
	 * 상품 재고 조회
	 * @param goodsStock
	 * @return
	 * @author xodud1202
	 * @since 2021. 01. 28
	 */
	GoodsStock getGoodsStockInfo(GoodsStock goodsStock);

	/**
	 * 딜상품 구성상품정보 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Collection<Goods> getGoodsDealComposeList(Goods goods);

	/**
	 * 상품 옵션1 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Collection<GoodsStock> getGoodsOption1List(Goods goods);

	/**
	 * 상품 옵션2 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 9
	 */
	Collection<GoodsStock> getGoodsOption2List(Goods goods);

	/**
	 * 상품 옵션 목록 - 입점용
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 18
	 */
	Collection<GoodsStock> getGoodsOptionList(Goods goods);

	/**
	 * 상품 고시정보
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 17
	 */
	Collection<GoodsNotiInfo> getGoodsNotiList(Goods goods);

	/**
	 * 카드 혜택
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 17
	 */
	Collection<CardPromotion> getCardPromotionList(CardPromotion cardPromotion);

	/**
	 * 핫딜 상품 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 17
	 */
	Goods getSocialGoods(Goods goods);

	/**
	 * 카드 혜택
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 17
	 */
	Collection<GoodsDesc> getGoodsDescList(GoodsDesc goodsDesc);

	/**
	 * 상품예약판매정보 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 2. 17
	 */
	Goods getGoodsResSell(Goods goods);

	/**
	 * 상품 사이즈 선택 시 재고수량 가져오기
	 *
	 * @param goodsStock
	 * @return
	 * @author eskim
	 * @since 2021. 3. 3
	 */
	int getGoodsStockQty(GoodsStock goodsStock);

	/**
	 * 상품  공지 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 7
	 */
	Collection<Notice> getGoodsNoticeList(Goods goods);
	
	/**
	 * 상세용 컨텐츠 목록
	 *
	 * @param goodsContents
	 * @return
	 * @author eskim
	 * @date 2021. 07. 14
	 */
	Collection<GoodsContents> getGoodsContentsList(GoodsContents goodsContents);
	
	
	/**
	 * 상품  안전인증 정보
	 *
	 * @param goodsStock
	 * @return
	 * @author eskim
	 * @since 2021. 3. 7
	 */
	GoodsSafeNo getGoodsSafeNo(Goods goods);

	/**
	 * 상품  배송안내정보
	 *
	 * @param goodsCd
	 * @return
	 * @author eskim
	 * @since 2021. 03. 08
	 */
	Delivery getGoodsDeliveryInfo(String goodsCd);

	/**
	 * 상품 다다익선 시퀀스 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 6. 10
	 */
	Collection<Tmtb> getTmtbSqList(Goods goods);

	/**
	 * 상품 다다익선 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 8
	 */
	Collection<Goods> getTmtbGoodsList(Goods goods);

	/**
	 * 상품 추천상품 목록
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 8
	 */
	Collection<Goods> getRecommendGoodsList(Goods goods);

	/**
	 * 재입고 알림 미 알림 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 10
	 */
	ReinboundInform getNotReinboundInform(ReinboundInform reinboundInform);

	/**
	 * 재입고알림 생성
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 10
	 */
	void createReinboundInform(ReinboundInform reinboundInform);

	/**
	 * 재입고알림 수정
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 10
	 */
	void updateReinboundInform(ReinboundInform reinboundInform);

	/**
	 * 실측사이즈 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 3. 10
	 */
	Collection<Measurement> getMeasurementList(Goods goods);

	/**
	 * 사이즈 정보 조회
	 *
	 * @param sizeInfo
	 * @return
	 * @author eskim
	 * @date 2021. 3. 11
	 */
	Collection<SizeInfo> getSizeInfoList(SizeInfo sizeInfo);

	/**
	 * 세트상품 구성상품정보 조회
	 *
	 * @param
	 * @return
	 * @author eskim
	 * @since 2021. 3. 21
	 */
	Collection<GoodsCompose> getGoodsSetComposeList(Goods goods);

	/**
	 * 상품의 다다익선 목록 
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 4. 11
	 */
	Collection<Tmtb> getTmtbList(Goods goods);

	/**
	 * 상품의 사은품 목록 
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 4. 13
	 */
	Collection<Freegift> getFreeGoodsList(Goods goods);

	/**
	 * 컨텐츠카테고리상품 목록(메인용)
	 * @param cate - 카테고리 정보
	 * @return
	 * @author gagamel
	 * @date 2021. 3. 25
	 */
	Collection<Goods> getContentsCategoryGoodsListMain(Cate4Srch cate);
	
	/**
	 * 컨텐츠카테고리상품 목록
	 * @param cate - 카테고리 정보
	 * @return
	 * @author jmh
	 * @date 2021. 8. 13
	 */
	Collection<Goods> getContentsCategoryGoodsList(Cate4Srch cate);

	/**
	 * 컨텐츠카테고리 신규상품 목록
	 * @param cate - 카테고리 정보
	 * @return
	 * @author gagamel
	 * @date 2021. 3. 25
	 */
	Collection<Goods> getContentsCategoryNewGoodsList(Cate4Srch cate);

	/**
	 * 배송비 SAVE 상품 조회
	 * @param cate - 카테고리 정보
	 * @return
	 * @author xodud1202
	 * @date 2021. 04. 27
	 */
	Collection<Goods> getDelvFeeSaveGoodsList(Goods param);

	/**
	 * 카테고리 별 상품수
	 * @param params - 검색엔진 정보
	 * @return
	 * @author bin2107
	 * @date 2021. 4. 7
	 */
	int getCategoryGoodsCount(SearchEngine params);

	/**
	 * 카테고리별 상품 목록
	 * @param params - 검색엔진 정보
	 * @return
	 * @author bin2107
	 * @date 2021. 4. 8
	 */
	Collection<SearchEngine> getCategoryGoodsList(SearchEngine params);

	/**
	 * 검색상품 총건수
	 * @param params - 검색엔진 정보
	 * @return
	 * @author gagamel
	 * @date 2021. 5. 6
	 */
	int getSearchGoodsCount(SearchEngine params);

	/**
	 * 검색상품 목록
	 * @param params - 검색엔진 정보
	 * @return
	 * @author gagamel
	 * @date 2021. 5. 6
	 */
	Collection<SearchEngine> getSearchGoodsList(SearchEngine params);

	/**
	 * 컨텐츠 카테고리 상품 건수
	 * @param params
	 * @return
	 * @author bin2107
	 * @date 2021. 5. 10
	 */
	int getContentsCategoryGoodsCount(Cate4Srch cate4Srch);

	/**
	 * 브랜드메인 브랜드별 신상품 50개 목록
	 * @param params
	 * @return
	 * @author bin2107
	 * @date 2021. 5. 12
	 */
	Collection<Goods> getBrandNewGoodsList(GoodsSearch goodsSearch);

	/**
	 * 상품 옵션 정보 조회
	 * @param params
	 * @return
	 * @author xodud1202
	 * @date 2021. 05. 12
	 */
	Collection<GoodsStock> getGoodsOptionInfoList(GoodsStock param);

	/**
	 * 상품 구매등급 조회
	 * @param goods
	 * @return
	 * @author xodud1202
	 * @since 2020. 05. 20
	 */
	Collection<Goods> getGoodsDetailOrderGradeList(Goods goods);

	/**
	 * 구성 상품 목록
	 * @param goods
	 * @return
	 * @author xodud1202
	 * @since 2020. 05. 25
	 */
	Collection<Goods> getCompsGoodsList(Goods goods);

	/**
	 * 상품 예약판매여부 확인
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @date 2021. 05. 30
	 */
	int getGoodsResSellCount(String goodsCd);

	/**
	 * 상품 사이즈 선택 시 매장 쵀대 재고수량 가져오기
	 *
	 * @param stock
	 * @return
	 * @author eskim
	 * @since 2021. 05. 30
	 */
	int getGoodsStoreStockQty(GoodsStock goodsStock);

	/**
	 * 카테고리메인 신규상품 목록
	 * @param cate - 카테고리 정보
	 * @return
	 * @author bin2107
	 * @date 2021. 6. 22
	 */
	Collection<Goods> getCategoryMainNewGoodsList(Cate4Srch cate);

	/**
	 * 신규고객 구매 가능 상품 여부 정보 조회
	 * @param param
	 * @return
	 * @author xodud1202
	 * @date 2021. 07. 06
	 */
	Goods getNewCustOrdCanYnInfo(Goods param);

	/**
	 * 상품추가정보 목록
	 * @param goods - 상품정보
	 * @return
	 * @author gagamel
	 * @date 2021. 7. 7
	 */
	Collection<Item> getGoodsAddInfoList(Goods goods);
	
	/**
	 * 상품 다른 색상의 productno 찾기
	 * @param goods - 상품정보
	 * @return
	 * @author eskim
	 * @date 2021. 7. 28
	 */
	Collection<GoodsStock> getProductNoByGoodsColor(Goods goods);
	
}
