package com.style24.scm.biz.dao;

import java.util.Collection;

import org.springframework.dao.DataAccessException;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.Goods;
import com.style24.persistence.domain.GoodsDesc;
import com.style24.persistence.domain.GoodsHst;
import com.style24.persistence.domain.GoodsImg;
import com.style24.persistence.domain.GoodsNotiInfo;
import com.style24.persistence.domain.GoodsPriceRes;
import com.style24.persistence.domain.GoodsSearch;
import com.style24.persistence.domain.NotiInfo;
import com.style24.persistence.domain.Notice;
import com.style24.persistence.domain.NoticeGoods;
import com.style24.persistence.domain.Option;

import com.gagaframework.web.parameter.GagaMap;

/**
 * 상품 Dao
 *
 * @author gagamel
 * @since 2020. 10. 19
 */
@ShopDs
public interface TssGoodsDao {

	/**
	 * 상품 목록 건수
	 *
	 * @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 goods
	 * @return
	 * @author eskim
	 * @since 2020. 11. 18
	 */
	Collection<GoodsImg> getGoodsColorList(Goods goods);

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

	/**
	 * 상품의 정보고시 항목 목록
	 *
	 * @param notiInfo
	 * @return
	 * @author eskim
	 * @since 2020. 10. 18
	 */
	Collection<NotiInfo> getNotiGoodsInfoList(NotiInfo notiInfo);

	/**
	 * 상품 기본 정보 이력 생성
	 *
	 * @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 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
	 * @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 option
	 * @author eskim
	 * @since 2020. 10. 27
	 */
	void createStockHst(Option option);

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

	/**
	 * 상품 기본 정보 등록
	 *
	 * @param goods
	 * @author eskim
	 * @since 2020. 10. 30
	 */
	void createGoods(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 goodsPriceRes
	 * @return void
	 * @author eskim
	 * @since 2020. 11. 13
	 */
	void createGoodPriceRes(GoodsPriceRes goodsPriceRes);

	/**
	 * 상품 옵션 존재여부 확인
	 *
	 * @param option
	 * @return
	 * @author eskim
	 * @since 2020. 11. 17
	 */
	int getGoodsOptionCount(Option option);

	/**
	 * 상품 가격 승인 목록 건수
	 *
	 * @param goodsPriceHst
	 * @return
	 * @author eskim
	 * @since 2020. 11. 26
	 */
	int getGoodsSupplyPriceCount(GoodsPriceRes goodsPriceRes);

	/**
	 * 상품 가격 승인 목록
	 *
	 * @param goodsPriceHst
	 * @return
	 * @author eskim
	 * @since 2020. 11. 26
	 */
	Collection<GoodsPriceRes> getGoodsSupplyPriceList(GoodsPriceRes goodsPriceRes);

	/**
	 * 상품 상세공지 목록
	 *
	 * @param goodsSearch
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	Collection<Notice> getNoticeList(GoodsSearch goodsSearch);

	/**
	 * 상품 상세공지 상품 목록
	 *
	 * @param goodsSearch
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	Collection<NoticeGoods> getNoticeGoodsList(Notice notice);

	/**
	 * 상품 상세공지 상품 저장
	 *
	 * @param noticeGoods
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	void saveNoticeGoods(NoticeGoods noticeGoods);

	/**
	 * 상품 상세공지 상품 삭제
	 *
	 * @param noticeGoods
	 * @return
	 * @author eskim
	 * @since 2020. 11. 27
	 */
	void deleteNoticeGoods(NoticeGoods noticeGoods);

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

	/**
	 * 상품 구매등급 삭제
	 *
	 * @param map
	 * @return
	 * @author eskim
	 * @since 2020. 12. 11
	 */
	void deleteGoodsCustGrade(Goods goods);

	/**
	 * 상품 구매등급 저장
	 *
	 * @param map
	 * @return
	 * @author eskim
	 * @since 2020. 12. 11
	 */
	void createGoodsCustGrade(Goods goods);

	/**
	 * 상품이미지 목록
	 *
	 * @param goodsImg
	 * @return Collection<GoodsImg>
	 * @author eskim
	 * @since 2020. 12. 23
	 */
	Collection<GoodsImg> getGoodsImageList(GoodsImg goodsImg);

	/**
	 * 상품이미지 전체 삭제
	 * @param goodsImg - 상품이미지 정보
	 * @throws DataAccessException
	 * @author eskim
	 * @since 2020. 12. 23
	 */
	public void deleteGoodsImageTotal(GoodsImg goodsImg);

	/**
	 * 상품이미지 삭제
	 * @param goodsImg - 상품이미지 정보
	 * @throws DataAccessException
	 * @author eskim
	 * @since 2020. 12. 23
	 */
	public void deleteGoodsImage(GoodsImg goodsImg);

	/**
	 * 상품이미지 등록
	 * @param goodsImg - 상품이미지 정보
	 * @throws DataAccessException
	 * @author eskim
	 * @since 2020. 12. 23
	 */
	public void createGoodsImage(GoodsImg goodsImg);

}
