package com.style24.front.biz.dao;

import java.util.Collection;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.Coupon;
import com.style24.persistence.domain.CustDeliveryAddr;
import com.style24.persistence.domain.Plan;
import com.style24.persistence.domain.Poll;
import com.style24.persistence.domain.Review;

/**
 * 기획전 Dao
 * 
 * @author gagamel
 * @since 2020. 12. 29
 */
@ShopDs
public interface TsfPlanningDao {

	/**
	 * 기획전 카테고리 목록
	 * @param plan - 기획전 정보
	 * @return
	 * @author gagamel
	 * @since 2021. 3. 29
	 */
	Collection<Plan> getPlanningCategoryList(Plan plan);

	/**
	 * 기획전 갯수 조회
	 * 
	 * @param Plan
	 * @return int
	 * @author sowon
	 * @since 2021.03.05
	 */
	int getPlanAllCount(Plan plan);

	/**
	 * 기획전 목록
	 * @param plan - 기획전 정보
	 * @return
	 * @author gagamel
	 * @date 2021. 3. 29
	 */
	Collection<Plan> getPlanningList(Plan plan);

	/**
	 * 기획전 상품 목록
	 * @param plan - 기획전 정보
	 * @return
	 * @author gagamel
	 * @since 2021. 3. 29
	 */
	Collection<Plan> getPlanningGoodsList(Plan plan);

	/**
	 * 유효한 기획전 여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:유효한 기획전
	 * @author gagamel
	 * @since 2021. 7. 6
	 */
	String getAvailPlanningYn(Plan plan);

	/**
	 * 디바이스접근가능여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:접근가능 / N:접근불가
	 * @author gagamel
	 * @since 2021. 3. 30
	 */
	String getDeviceAccessibleYn(Plan plan);

	/**
	 * 신규회원접근가능여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:접근가능 / N:접근불가
	 * @author gagamel
	 * @since 2021. 3. 30
	 */
	String getNewCustomerAccessibleYn(Plan plan);

	/**
	 * 고객구분접근가능여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:접근가능 / N:접근불가
	 * @author gagamel
	 * @since 2021. 3. 30
	 */
	String getCustomerGubunAccessibleYn(Plan plan);

	/**
	 * 고객등급접근가능여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:접근가능 / N:접근불가
	 * @author gagamel
	 * @since 2021. 3. 30
	 */
	String getCustomerGradeAccessibleYn(Plan plan);

	/**
	 * 웹제휴채널접근가능여부 조회
	 * @param plan - 기획전 정보
	 * @return Y:접근가능 / N:접근불가
	 * @author gagamel
	 * @since 2021. 3. 30
	 */
	String getAfLinkAccessibleYn(Plan plan);

	/**
	 * 기획전 접근 가능 등급 고객
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 19
	 */
	Collection<Plan> accessCustGrade(Plan plan);

	/**
	 * 기획전 상세정보
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 19
	 */
	Plan getPlanDetailInfo(Plan plan);

	/**
	 * 기획전 상세 프론트 소스 
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 22
	 */
	Plan getPlanFsrcInfo(Plan plan);

	/**
	 * 기획전 템플릿 순서
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 22
	 */
	Collection<Plan> templateDispOrdInfo(Plan plan);

	/**
	 * 기획전 템플릿 리뷰
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 22
	 */
	Collection<Plan> getPlanReviewInfo(Review review);

	/**
	 * 기획전 템플릿 쿠폰
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 22
	 */
	Collection<Plan> getPlanCouponInfo(Coupon coupon);

	/**
	 * 기획전 템플릿 이미지
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 22
	 */
	Collection<Plan> getPlanImageInfo(Plan plan);

	/**
	 * 기획전 템플릿 유의사항
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 5. 26
	 */
	Collection<Plan> getPlanNoticeInfo(Plan plan);

	/**
	 * 기획전 템플릿 상품 1열
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 23
	 */
	Collection<Plan> getPlanGoodsDisplayList(Plan plan);

	/**
	 * 기획전 코너 리스트
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 3. 30
	 */
	Collection<Plan> getPlanCornerList(Plan plan);

	/**
	 * 기획전 코너 상품 리스트
	 *
	 * @param 
	 * @return
	 * @author sowon
	 * @date 2021. 3. 31
	 */
	Collection<Plan> getPlanningCornerGoodsList(Plan plan);

	/**
	 * 이벤트 갯수 조회
	 * 
	 * @param Plan
	 * @return int
	 * @author sowon
	 * @since 2021.03.08
	 */
	int getEventAllCount(Plan plan);

	/**
	 * 이벤트 목록
	 *
	 * @param
	 * @return
	 * @author sowon
	 * @date 2021. 3. 8
	 */
	Collection<Plan> getPlanEventList(Plan plan);

	/**
	 * 총알배송 상단 html 소스 
	 *
	 * @param plan
	 * @return plan
	 * @author sowon
	 * @date 2021. 3. 30
	 */
	Plan getShotDeliveryHtmlTop(Plan plan);

	/**
	 * 총알배송 하단 html 소스 
	 *
	 * @param plan
	 * @return plan
	 * @author sowon
	 * @date 2021. 3. 30
	 */
	Plan getShotDeliveryHtmlBtm(Plan plan);

	/**
	 * 설문조사 정보
	 *
	 * @param plan
	 * @return poll
	 * @author sowon
	 * @date 2021. 4. 3
	 */
	Poll getPollQuestionInfo(Plan plan);

	/**
	 * 설문조사 질문내용
	 *
	 * @param plan
	 * @return poll
	 * @author sowon
	 * @date 2021. 4. 3
	 */
	Collection<Poll> getPollQuestionList(Plan plan);

	/**
	 * 설문조사 등록
	 *
	 * @param poll
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 3
	 */
	void savePollCustAnswer(Poll poll);

	/**
	 * 설문조사 중복 인덱스
	 *
	 * @param poll
	 * @return 
	 * @author sowon
	 * @date 2021. 6. 18
	 */
	int getPollCustAnswerIndex();

	/**
	 * 설문조사 중복카운트
	 *
	 * @param plan
	 * @return int
	 * @author sowon
	 * @date 2021. 4. 4
	 */
	int getCustAnswerCount(Plan plan);

	/**
	 * 설문조사 선착순 카운트
	 *
	 * @param poll
	 * @return int
	 * @author sowon
	 * @date 2021. 4. 5
	 */
	int getCustAnswerPartiCount(Poll poll);

	/**
	 * 총알배송 조회할 기본 주소
	 *
	 * @param CustDeliveryAddr
	 * @return CustDeliveryAddr
	 * @author sowon
	 * @date 2021. 4. 5
	 */
	CustDeliveryAddr getCustAddrInfo(CustDeliveryAddr addr);

	/**
	 * 총알배송 가능여부
	 *
	 * @param CustDeliveryAddr
	 * @return CustDeliveryAddr
	 * @author sowon
	 * @date 2021. 4. 5
	 */
	CustDeliveryAddr getCustAddrShotConfirm(String recipZipcode);

	/**
	 * 출석체크 달력
	 *
	 * @param Plan
	 * @return plan
	 * @author sowon
	 * @date 2021. 4. 6
	 */
	Collection<Plan> getAttendMonth(Plan plan);

	/**
	 * 출석체크 
	 *
	 * @param Plan
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 7
	 */
	void saveAttendEntry(Plan plan);

	/**
	 * 출석체크 확인
	 *
	 * @param Plan
	 * @return int
	 * @author sowon
	 * @date 2021. 4. 7
	 */
	int getAttendEntryCount(Plan plan);

	/**
	 * 출석체크 혜택 리스트
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 14
	 */
	Collection<Plan> getAttendBenefitList(Plan plan);

	/**
	 * 고객이 출석한 일 리스트
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 7
	 */
	Collection<Plan> getCustAttendEntryList(Plan plan);

	/**
	 * 기획전/이벤트 댓글
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 8
	 */
	Collection<Plan> getReplyList(Plan plan);

	/**
	 * 기획전/이벤트 댓글 저장
	 *
	 * @param Plan
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 13
	 */
	void saveEntryReply(Plan plan);

	/**
	 * 기획전/이벤트 댓글 카운트
	 *
	 * @param Plan
	 * @return int
	 * @author sowon
	 * @date 2021. 4. 13
	 */
	int getEntryReplyCount(Plan plan);

	/**
	 * 기획전/이벤트 댓글 삭제
	 *
	 * @param Plan
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 13
	 */
	void deleteEntryReply(Plan plan);

	/**
	 * 기획전/이벤트 댓글 이미지 저장
	 *
	 * @param Plan
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 13
	 */
	void saveEntryReplyAttach(Plan plan);

	/**
	 * 기획전/이벤트 댓글 이미지 리스트
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 8
	 */
	Collection<Plan> getEntryReplyAttachList(Plan plan);

	/**
	 * 기획전/이벤트 댓글 이미지 삭제
	 *
	 * @param Plan
	 * @return 
	 * @author sowon
	 * @date 2021. 4. 13
	 */
	void deleteEntryReplyAttach(Plan plan);

	/**
	 * 기획전/이벤트 접근 고객 리스트
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 22
	 */
	Plan getCustomerGubunAccessibleList(Plan plan);

	/**
	 * 기획전/이벤트 접근 고객 리스트
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 22
	 */
	Collection<Plan> getCustomerGradeAccessibleList(Plan plan);

	/**
	 * 기획전/이벤트 비회원 접근 조회
	 *
	 * @param Plan
	 * @return int
	 * @author sowon
	 * @date 2021. 5. 4
	 */
	int getNonmemberGradeAccessible(Plan plan);

	/**
	 * 기획전/이벤트 접근 프론트 구분
	 *
	 * @param Plan
	 * @return Collection<Plan>
	 * @author sowon
	 * @date 2021. 4. 22
	 */
	String getFrontAccessibleList(Plan plan);

	/**
	 * 총알배송 planSq 
	 *
	 * @param 
	 * @return
	 * @author sowon
	 * @date 2021. 5. 10
	 */
	Integer getShotPlanSq(Plan plan);

	/**
	 * 기획전 컨텐츠 정보 
	 *
	 * @param 기획전 번호
	 * @return
	 * @author sowon
	 * @date 2021. 6. 3
	 */
	Collection<Plan> getPlanContentInfo(Plan plan);

	/**
	 * 총알배송 브랜드 리스트 
	 *
	 * @param 
	 * @return
	 * @author sowon
	 * @date 2021. 6. 29
	 */
	Collection<Plan> getShotBrandList();

	/**
	 * 총알배송 브랜드 리스트 
	 *
	 * @param 
	 * @return
	 * @author sowon
	 * @date 2021. 6. 29
	 */
	Collection<Plan> getShotDeliveryGoodsList(Plan plan);

}
