package com.style24.admin.biz.dao;

import java.util.Collection;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.CodiGoods;
import com.style24.persistence.domain.Color;
import com.style24.persistence.domain.Goods;
import com.style24.persistence.domain.GoodsCompose;
import com.style24.persistence.domain.GoodsDesc;
import com.style24.persistence.domain.GoodsHst;
import com.style24.persistence.domain.GoodsNotiInfo;
import com.style24.persistence.domain.GoodsSearch;
import com.style24.persistence.domain.Itemkind;
import com.style24.persistence.domain.NotiInfo;
import com.style24.persistence.domain.Option;

import com.gagaframework.web.parameter.GagaMap;

/**
 * 상품관리 Dao
 *
 * @author eskim
 * @since 2020. 10. 16
 */
@ShopDs
public interface TsaGoodsDao {

	/**
	 * 품목 목록
	 * @param itemkind
	 * @return
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	Collection<Itemkind> getItemkindList(Itemkind itemkind);

	/**
	 * 품목 저장(등록/저장)
	 * @param itemkind - 품목 정보
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	void saveItemkindInfo(Itemkind itemkind);

	/**
	 * 품목 삭제
	 * @param itemkind - 품목 정보
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	void deleteItemkindInfo(Itemkind itemkind);

	/**
	 * 색상목록 조회
	 *
	 * @param color
	 * @return
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	Collection<Color> getColorList(Color color);

	/**
	 * 색상 저장
	 * @param color
	 * @author eskim
	 * @since 2020. 10. 16
	 */
	void saveColor(Color color);

	/**
	 * 상품정보고시 목록
	 * @param notiInfo
	 * @return
	 * @author eskim
	 * @since 2010. 10. 19
	 */
	Collection<NotiInfo> getNotiInfoList(NotiInfo notiInfo);

	/**
	 * 상품정보고시 항목 목록
	 * @param notiInfo
	 * @return
	 * @author eskim
	 * @since 2010. 10. 19
	 */
	Collection<NotiInfo> getNotiInfoItemList(NotiInfo notiInfo);

	/**
	 * 상품정보고시 상세 저장
	 * @param notiInfo
	 * @author eskim
	 * @since 2010. 10. 19
	 */
	void saveNotiInfo(NotiInfo notiInfo);

	/**
	 * 상품 목록 건수
	 *
	 * @param goodsSearch
	 * @return
	 * @author eskim
	 * @since 2010. 10. 20
	 */
	int getGoodsListCount(GoodsSearch goodsSearch);

	/**
	 * 상품 목록
	 *
	 * @param goodsSearch
	 * @return
	 * @author eskim
	 * @since 2010. 10. 20
	 */
	Collection<Goods> getGoodsList(GoodsSearch goodsSearch);

	/**
	 * 상품 목록 기본정보 엑셀다운로드
	 *
	 * @param goodsSearch
	 * @return
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	Collection<GagaMap> getGoodsInfoExcelList(GoodsSearch goodsSearch);

	/**
	 * 상품 이미지 필수 항목 입력 여부 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	Collection<Goods> getGoodsImgsYn(Goods goods);

	/**
	 * 상품 상세
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	Goods getGoods(Goods goods);

	/**
	 * 상품 상세 정보 조회
	 *
	 * @param goodsVideo
	 * @return
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	Collection<GoodsDesc> getGoodsDescList(GoodsDesc goodsDesc);

	/**
	 * 상품 정보 이력
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @since 2019. 08. 12
	 */
	Collection<GoodsHst> getGoodsHstList(Goods goods);

	/**
	 * 상품 옵션 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @since 2020. 10. 26
	 */
	Collection<Option> getGoodsSizeList(Goods goods);


	/**
	 * 상품 고시 조회
	 *
	 * @param goodsNotiInfo
	 * @return
	 * @author eskim
	 * @since 2020. 10. 12
	 */
	Collection<GoodsNotiInfo> getGoodsNotiInfoList(GoodsNotiInfo goodsNotiInfo);

	/**
	 * 구성상품 목록
	 *
	 * @param goodsNotiInfo
	 * @return
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	Collection<GoodsCompose> getGoodsDetailComposeList(Goods goods);

	/**
	 * 상품 기본 정보 이력 생성
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	void createGoodsHst(Goods goods);

	/**
	 * 상품 수정 항목 일괄변경
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 22
	 */
	void updateGoodsState(Goods goods);

	/**
	 * 상품 품목변경
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	void updateGoodItemKindCd(Goods goods);

	/**
	 * 상품 자동 검색어 조회
	 *
	 * @param goodsCd
	 * @return
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	String getGoodsSnm(String goodsCd);

	/**
	 * 상품검색어 수정
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	void updateGoodsSnm(Goods goods);

	/**
	 * 상품 품목변경 고시정보 조회
	 *
	 * @param goods
	 * @return
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	Collection<GoodsNotiInfo> getNewNotiInfo(Goods goods);

	/**
	 * 상품 품목변경 고시정보 삭제
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	void deleteGoodsNotiInfo(Goods goods);

	/**
	 * 상품 고시 정보 수정
	 *
	 * @param goodsNotiInfo
	 * @author eskim
	 * @since 2020. 10. 23
	 */
	void saveGoodsNotiInfo(GoodsNotiInfo goodsNotiInfo);

	/**
	 * 코디 상품 목록 조회
	 *
	 * @param codiGoods
	 * @return
	 * @author eskim
	 * @since 2020. 10. 26
	 */
	Collection<CodiGoods> getCodiGoodsList(CodiGoods codiGoods);

	/**
	 * 상품 기본 정보 수정
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void updateGoods(Goods goods);

	/**
	 * 상품 상세정보 삭제
	 *
	 * @param godsDesc
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void deleteGoodsDesc(GoodsDesc godsDesc);

	/**
	 * 상품 상세정보 등록
	 *
	 * @param godsDesc
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void createGoodsDesc(GoodsDesc godsDesc);

	/**
	 * 구성상품 저장
	 *
	 * @param goodsCompose
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void saveGoodsCompose(GoodsCompose goodsCompose);

	/**
	 * 상품 옵션/재고 정보 이력생성
	 *
	 * @param option
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void createStockHst(Option option);

	/**
	 * 상품 옵션/재고 정보 수정
	 *
	 * @param stock
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void saveStock(Option option);

	/**
	 * 코드상품 저장
	 * @param codiGoods
	 * @author eskim
	 * @since 2020. 10. 28
	 */
	void saveCodiGoods(CodiGoods codiGoods);

	/**
	 * 코드상품 삭제
	 * @param codiGoods
	 * @author eskim
	 * @since 2020. 10. 28
	 */
	void deleteCodiGoods(CodiGoods codiGoods);

}
