package com.style24.batch.biz.dao;

import java.util.Collection;

import org.springframework.stereotype.Repository;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.CustContactHst;
import com.style24.persistence.domain.CustCoupon;
import com.style24.persistence.domain.CustGrade;
import com.style24.persistence.domain.Customer;
import com.style24.persistence.domain.CustomerSearch;
import com.style24.persistence.domain.Netpathy;
import com.style24.persistence.domain.SsgDirectMessage;

/**
 * 회원(고객) Dao
 *
 * @author jsshin
 * @since 2021. 03. 04
 */
@ShopDs
@Repository
public interface TsbCustomerDao {

	/**
	 * 휴면회원선정 안내 대상건수
	 *
	 * @param customerSearch - 선정기간
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 27
	 */
	int getDormantCustomerScheduleListCount(CustomerSearch customerSearch);

	/**
	 * 휴면회원선정 안내 대상 조회( 기본환경설정 > 휴면회선정기간)
	 *
	 * @param customerSearch - 선정기간
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 03. 04
	 */
	Collection<Customer> getDormantCustomerScheduleList(CustomerSearch customerSearch);

	/**
	 * 휴면회원전환기간 등록된 일로 휴면 처리대상 리스트
	 *
	 * @param customerSearch - 선정기간
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 03. 04
	 */
	Collection<Customer> getDormentCustomerList(CustomerSearch customerSearch);

	/**
	 * 휴면회원보 저장
	 *
	 * @param customerSearch - 선정기간
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 03. 04
	 */
	int createDormantCustomer(CustomerSearch customerSearch);

	/**
	 * 회원정보 휴면처리
	 *
	 * @param customerSearch - 가입사이트코드, 휴면
	 * @return int
	 * @author jsshin
	 * @since  2021. 03. 04
	 */
	int updateDormantCustomer(CustomerSearch customerSearch);

	/**
	 * 휴면주문정보 생성
	 *
	 * @param customerSearch - 가입사이트코드, 휴면
	 * @return int
	 * @author jsshin
	 * @since  2021. 03. 11
	 */
	int createDormantOrder(CustomerSearch customerSearch);

	/**
	 * 주문정보 휴면 처리
	 *
	 * @param customerSearch - 가입사이트코드, 휴면
	 * @return int
	 * @author jsshin
	 * @since  2021. 03. 11
	 */
	int updateDormantOrder(CustomerSearch customerSearch);

	/**
	 * 탈퇴회원 목록
	 *
	 * @param customerSearch
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 03. 08
	 */
	Collection<Customer> getExpireSecedeCustomerList(CustomerSearch customerSearch);

	/**
	 * 개인정보 이용내역 안내 대상목록
	 *
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 05. 06
	 */
	Collection<Customer> getPrivacyPolicyNoticeTargetList(CustomerSearch customerSearch);

	/**
	 * 마케팅 정보 수신동의 내역 안내 대상 총 건수
	 *
	 * @return int - 건수
	 * @author jsshin
	 * @since  2021. 07. 27
	 */
	int getMarketingAgreeNoticeTargetListCount(CustomerSearch customerSearch);

	/**
	 * 마케팅 정보 수신동의 안내 대상목록
	 *
	 * @return Collection<Customer>
	 * @author jsshin
	 * @since  2021. 05. 06
	 */
	Collection<Customer> getMarketingAgreeNoticeTargetList(CustomerSearch customerSearch);

	/**
	 * 회원등급정책 목록
	 *
	 * @return Collection<CustGrade>
	 * @author jsshin
	 * @since  2021. 05. 07
	 */
	Collection<CustGrade> getCustGradePolicyList(CustGrade custGrade);

	/**
	 * 변경된 회원등급 이력 생성
	 *
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 05. 07
	 */
	int createChangeCustGradeHst(CustGrade custGrade);

	/**
	 * 변경된등급 회원 이력 생성
	 *
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 05. 07
	 */
	int createChangeCustomerHst(CustGrade custGrade);

	/**
	 * 변경된등급 회원 총 건수
	 *
	 * @return Collection<Customer> - 목록
	 * @author jsshin
	 * @since  2021. 07. 27
	 */
	int getCustGradeChangeTargetListCount(CustomerSearch customerSearch);

	/**
	 * 변경된등급 회원 목록
	 *
	 * @return Collection<Customer> - 목록
	 * @author jsshin
	 * @since  2021. 05. 07
	 */
	Collection<Customer> getCustGradeChangeTargetList(CustomerSearch customerSearch);

	/**
	 * 회원등급 변경 처리
	 *
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 05. 07
	 */
	int updateCustomerGrade(CustGrade custGrade);

	/**
	 * 넷퍼시메일솔루션 회원정보 Truncate - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailCustomer();

	/**
	 * 넷퍼시메일솔루션 회원정보 Truncate - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailCustomerDev();

	/**
	 * 넷퍼시메일솔루션 회원정보 생성 - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailCustomer();

	/**
	 * 넷퍼시메일솔루션 회원정보 생성 - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailCustomerDev();

	/**
	 * 넷퍼시메일솔루션 탈퇴/휴면회원정보 Truncate - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailWithdrawalCustomer();

	/**
	 * 넷퍼시메일솔루션 탈퇴/휴면회원정보 Truncate - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailWithdrawalCustomerDev();

	/**
	 * 넷퍼시메일솔루션 탈퇴/휴면회원정보 생성 - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailWithdrawalCustomer();

	/**
	 * 넷퍼시메일솔루션 탈퇴/휴면회원정보 생성 - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailWithdrawalCustomerDev();

	/**
	 * 넷퍼시메일솔루션 회원포인트정보 Truncate - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailCustomerPoint();

	/**
	 * 넷퍼시메일솔루션 회원포인트정보 Truncate - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	void truncateNetpathyMailCustomerPointDev();

	/**
	 * 넷퍼시메일솔루션 회원포인트정보 생성 - 운영DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailCustomerPoint();

	/**
	 * 넷퍼시메일솔루션 회원포인트정보 생성 - 개발DB
	 * @author gagamel
	 * @since 2021. 5. 10
	 */
	int createNetpathyMailCustomerPointDev();

	/**
	 * 생일자대상 목록 총 건수
	 *
	 * @param  customerSearch - 사이트 코드
	 * @return Collection<CustCoupon> - 목록
	 * @author jsshin
	 * @since  2021. 07. 27
	 */
	int getBirthDayTargetListCount(CustomerSearch customerSearch);

	/**
	 * 생일자대상 목록
	 *
	 * @param  customerSearch - 사이트 코드
	 * @return Collection<CustCoupon> - 목록
	 * @author jsshin
	 * @since  2021. 05. 10
	 */
	Collection<CustCoupon> getBirthDayTargetList(CustomerSearch customerSearch);

	/**
	 * 휴면/미접속자 대상 목록 총 건수
	 *
	 * @param  customerSearch - 사이트 코드, 시작일, 종료일
	 * @return int - 총 건수
	 * @author jsshin
	 * @since  2021. 05. 27
	 */
	int getComBackNotiTarketListCount(CustomerSearch customerSearch);

	/**
	 * 휴면/미접속자 대상 목록
	 *
	 * @param  customerSearch - 사이트 코드, 시작일, 종료일
	 * @return Collection<Customer> - 목록
	 * @author jsshin
	 * @since  2021. 05. 27
	 */
	Collection<Customer> getComBackNotiTarketList(CustomerSearch customerSearch);

	/**
	 * 개인정보 이용내역 안내 알림톡 - 운영
	 *
	 * @param  directMessage - 메신저 내용
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 16
	 */
	int createPrivacyPolicyNoticeKko(SsgDirectMessage directMessage);

	/**
	 * 개인정보 이용내역 안내 알림톡 - 개발
	 *
	 * @param  directMessage - 메신저 내용
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 16
	 */
	int createPrivacyPolicyNoticeKkoDev(SsgDirectMessage directMessage);

	/**
	 * 개인정보 이용내역 안내 메일 - 운영
	 *
	 * @param  netpathy - 메일 내용
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 16
	 */
	int createPrivacyPolicyNoticeEmail(Netpathy netpathy);

	/**
	 * 개인정보 이용내역 안내 메일 - 개발
	 *
	 * @param  netpathy - 메일 내용
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 16
	 */
	int createPrivacyPolicyNoticeEmailDev(Netpathy netpathy);

	/**
	 * 개인 접촉이력 대량 저당
	 *
	 * @param  custContactHst - hst
	 * @return int
	 * @author jsshin
	 * @since  2021. 07. 16
	 */
	int createCustomerContactHistoryBulk(CustContactHst custContactHst);

}
