package com.style24.front.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.CustGrade;
import com.style24.persistence.domain.CustSnsInfo;
import com.style24.persistence.domain.Customer;
import com.style24.persistence.domain.WishList;

/**
 * 고객(회원) Dao
 * 
 * @author gagamel
 * @since 2020. 12. 29
 */
@ShopDs
@Repository
public interface TsfCustomerDao {

	/**
	 * 가입된 회원이 있는지 확인
	 * @param customer - 아이디, 이메일, 휴대폰
	 * @return 임시비밀번호
	 * @author jsshin
	 * @since 2021. 02. 18
	 */
	int getCustomerInfoCount(Customer customer);

	/**
	 * 활동, 탈퇴, 휴면 테이블 조회
	 * @param customer - ci, 휴대폰
	 * @return 임시비밀번호
	 * @author jsshin
	 * @since 2021. 02. 18
	 */
	Customer getCustomerInfo(Customer customer);

	/**
	 * 고객 데이터 생성
	 * @param customer - 고객정보
	 * @return 성공여부 - 카운트
	 * @author jsshin
	 * @since 2021. 02. 19
	 */
	int createCustomer(Customer customer);

	/**
	 * 고객소셜 데이터 생성
	 * @param customer - 고객정보
	 * @return 성공여부 - 카운트
	 * @author jsshin
	 * @since 2021. 02. 22
	 */
	int createCustomerSns(Customer customer);

	/**
	 * 활동, 휴면 테이블 조회
	 * @param customer - 고객정보
	 * @return 고객정보
	 * @author jsshin
	 * @since 2021. 02. 24
	 */
	Customer getCustomerActiveAndDormant(Customer customer);

	/**
	 * SNS 정보로 고객 테이블 조회
	 * @param custSnsInfo - 고객정보
	 * @return 고객정보
	 * @author jsshin
	 * @since 2021. 02. 24
	 */
	Customer getCusomterSnsFind(CustSnsInfo custSnsInfo);

	/**
	 * 가입된 이력 확인
	 * @param customer - 고객 정보
	 * @return 고객 아이디(여러개이면 MAX)
	 * @author jsshin
	 * @since 2021. 03. 02
	 */
	String getCustomerMaxCustId(Customer customer);

	/**
	 * 위시리스트 등록
	 *
	 * @param wishlist - 위시리스트 정보
	 * @return
	 * @author eskim
	 * @since 2021. 03. 08
	 */
	void createWishList(WishList wishlist);

	/**
	 * 위시리스트 삭제처리
	 *
	 * @param params - 고객일련번호, 상품코드
	 * @author eskim
	 * @since 2021. 03. 08
	 */
	void deleteWishList(WishList wishList);

	/**
	 * 위시리스트 삭제 상품 조회
	 *
	 * @param custNo
	 * @author eskim
	 * @since 2021. 03. 11
	 */
	String getDeleteGoodsWish(int custNo);

	/**
	 * 본인인증 처리
	 *
	 * @param customer - 고객번호, ci
	 * @return int - 업데이트 카운트
	 * @author jsshin
	 * @since 2021. 03. 11
	 */
	int updateCustomerCi(Customer customer);

	/**
	 * 비밀번호 변경 날짜 업데이트
	 *
	 * @param customer - 고객번호
	 * @return int - 업데이트 카운트
	 * @author jsshin
	 * @since 2021. 03. 11
	 */
	int updatePasswordDate(Customer customer);

	/**
	 * 본인인증을 통한 정보수정
	 * @param customer - 고객정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 15
	 */
	int updateCustomerAuth(Customer customer);

	/**
	 * 고객정보- 마케팅 정보 수정
	 * @param customer - 고객정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 22
	 */
	int updateCustomerInfo(Customer customer);

	/**
	 * 고객등급 정책
	 *
	 * @param custGrade - 사이트 코드
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 04. 06
	 */
	Collection<CustGrade> getCustGradePolicy(CustGrade custGrade);

	/**
	 * 고객 예상등급 조회
	 *
	 * @param custGrade - 사이트 코드
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 04. 06
	 */
	CustGrade getExpectedCustGrde(CustGrade custGrade);

	/**
	 * 고객 등급 기준 주문정보 조회
	 *
	 * @param custGrade - 사이트 코드
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 04. 06
	 */
	CustGrade getCustGradeOrderInfo(CustGrade custGrade);

	/**
	 * SMS수신거부 처리
	 * @param custNo - 고객번호
	 * @return 처리건수
	 * @author gagamel
	 * @since 2021. 5. 11
	 */
	int updateSmsReceptionRefuse(Integer custNo);

	/**
	 * 메일수신거부 처리
	 * @param custNo - 고객번호
	 * @return 처리건수
	 * @author gagamel
	 * @since 2021. 5. 11
	 */
	int updateEmailReceptionRefuse(Integer custNo);

	/**
	 * 앱수신동의
	 *
	 * @param custInfo - 앱수신여부, 고객번호
	 * @return 처리건수
	 * @author jsshin
	 * @since 2021. 05. 22
	 */
	int updateAppAgreeYn(Customer custInfo);

	/**
	 * 앱마케팅 수신동의
	 *
	 * @param custInfo - 앱 마케팅 수신동의, 고객번호
	 * @return 처리건수
	 * @author jsshin
	 * @since 2021. 05. 22
	 */
	int updateMkAgreeYn(Customer custInfo);

	/**
	 * 선물하기 알림톡 발송 정보 조회
	 * 
	 * @param CustContactHst
	 * @return int
	 * @author card007
	 * @since 2021. 06. 04
	 */
	int getGiftKakaoSendInfo(CustContactHst custContactHst);
}
