package com.style24.core.biz.dao;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.CustAccount;
import com.style24.persistence.domain.CustContactHst;
import com.style24.persistence.domain.CustDeliveryAddr;
import com.style24.persistence.domain.Customer;
import org.springframework.stereotype.Repository;

import java.util.Collection;


/**
 * 회원 Dao
 * 
 * @author jsshin
 * @since 2020. 1. 20
 */
@ShopDs
@Repository
public interface TscCustomerDao {

	/**
	 * 회원 정보
	 * @param customer - 고객정보
	 * @return Customer
	 * @author jsshin
	 * @since 2021. 01. 18
	 */
	Customer getCustomerInfo(Customer customer);

	/**
	 * 회원접촉이력 생성
	 *
	 * @param custContactHst - 고객접촉이력
	 * @author jsshin
	 * @since 2020. 1. 20
	 */
	void createCustomerContactHistory(CustContactHst custContactHst);

	/**
	 * 고객이력 생성
	 *
	 * @param customer - 고객번호/사용자번호
	 * @author jsshin
	 * @since 2021. 1. 20
	 */
	void createCustomerHistory(Customer customer);


	/**
	 * 회원 비밀번호 수정
	 * @param customer - 고객정보
	 * @author jsshin
	 * @since 2021. 1. 20
	 */
	void updateCustomerPassword(Customer customer);

	/**
	 * 탈퇴 정보 생성
	 *
	 * @param customer - 고객정보
	 * @return int
	 * @author jsshin
	 * @since 2021. 1. 26
	 */
	int createCustomerSecede(Customer customer);

	/**
	 * 회원정보 탈퇴처리
	 *
	 * @param customer- 고객정보
	 * @return int
	 * @author jsshin
	 * @since 2021. 1. 26
	 */
	int updateCustomerSecedeInfo(Customer customer);

	/**
	 * 회원정보 마케팅수신동의이력
	 *
	 * @param customer- 고객정보
	 * @author jsshin
	 * @since 2021. 1. 26
	 */
	void createCustomerMarketHst(Customer customer);

	/**
	 * 위시리스트 삭제 - 회원탈퇴시 사용
	 *
	 * @param custNo - 고객고유번호
	 * @return int - 삭제건수
	 * @author jsshin
	 * @since 2021. 1. 27
	 */
	int deleteWishList(Integer custNo);

	/**
	 * 장바구니상세 삭제 - 회원탈퇴시 사용
	 *
	 * @param custNo - 고객고유번호
	 * @return int - 삭제건수
	 * @author jsshin
	 * @since 2021. 03. 15
	 */
	int deleteCustomerCartDetail(Integer custNo);

	/**
	 * 장바구니 삭제 - 회원탈퇴시 사용
	 *
	 * @param custNo - 고객고유번호
	 * @return int - 삭제건수
	 * @author jsshin
	 * @since 2021. 03. 15
	 */
	int deleteCustomerCart(Integer custNo);

	/**
	 * 임시비밀번호 조회
	 * @param length - 비밀번호 자릿수
	 * @return String
	 * @since 2021. 02. 15
	 */
	String getTemporaryPassword(int length);

	/**
	 * 휴면해제
	 *
	 * @param customer - 고객정보
	 * @return int - 처리결과
	 * @author jsshin
	 * @since 2021. 03. 08
	 */
	int updateDormantCustomerRelease(Customer customer);

	/**
	 * 휴면테이블 삭제 처리
	 *
	 * @param custNo - 고객번호
	 * @return int - 처리결과
	 * @author jsshin
	 * @since 2021. 03. 08
	 */
	int deleteDormantCustomer(Integer custNo);

	/**
	 * 주문정보 휴면해제
	 *
	 * @param customer - 고객정보
	 * @return int - 처리결과
	 * @author jsshin
	 * @since 2021. 03. 11
	 */
	int updateDormantOrderRelease(Customer customer);

	/**
	 * 휴면주문 정보 삭제
	 *
	 * @param custNo - 고객번호
	 * @return int - 처리결과
	 * @author jsshin
	 * @since 2021. 03. 11
	 */
	int deleteDormantOrder(Integer custNo);


	/**
	 * 고객계좌 정보
	 * @param  custAccount - 계좌정보
	 * @return CustAccount - 결과
	 * @author jsshin
	 * @since 2021. 03. 18
	 */
	CustAccount getCustomerAccuontInfo(CustAccount custAccount);

	/**
	 * 고객계좌 정보 초기화
	 * @param  custAccount - 계좌정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 22
	 */
	int updateAccountDefaultInit(CustAccount custAccount);

	/**
	 * 고객계좌 변경
	 * @param  custAccount - 계좌정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 22
	 */
	int updateAccountInfo(CustAccount custAccount);

	/**
	 * 고객계좌 등록
	 * @param  custAccount - 계좌정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 22
	 */
	int createAccountInfo(CustAccount custAccount);


	/**
	 * 이메일 유효성 확인
	 * @param customer - 고객정보
	 * @return int - 결과
	 * @author jsshin
	 * @since 2021. 03. 15
	 */
	int getCustomerByEmail(Customer customer);

	/**
	 * 배송지 목록
	 * @param  custDeliveryAddr - 고객번호
	 * @return Collection<CustDeliveryAddr> - 배송목록
	 * @author jsshin
	 * @since 2021. 04. 01
	 */
	Collection<CustDeliveryAddr> getCustomerDeliveryAddrList(CustDeliveryAddr custDeliveryAddr);

	/**
	 * 기본배송지 초기화
	 *
	 * @param custDeliveryAddr -배송지정보
	 * @author jsshin
	 * @since 2021. 01. 21
	 */
	void updateCustomerDeliveryAddrDefaultInit(CustDeliveryAddr custDeliveryAddr);

	/**
	 * 배송지 등록/수정
	 *
	 * @param custDeliveryAddr -배송지정보
	 * @author jsshin
	 * @since 2021. 01. 21
	 */
	void saveCustomerDeliveryAddr(CustDeliveryAddr custDeliveryAddr);

	/**
	 * 배송지 삭제
	 *
	 * @param custDeliveryAddr -배송지정보
	 * @author jsshin
	 * @since 2021. 01. 21
	 */
	int deleteCustDeliveryAddr(CustDeliveryAddr custDeliveryAddr);

	/**
	 * 탈퇴일시
	 *
	 * @param custNo - 고객번호
	 * @author jsshin
	 * @since 2021. 06. 07
	 */
	Customer getSecedeDt(Integer custNo);

	/**
	 * 고객이력 삭제
	 *
	 * @param custNo - 고객번호
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 03. 08
	 */
	int deleteCustomerHst(Integer custNo);

	/**
	 * SNS정보 삭제
	 *
	 * @param custNo - 고객번호
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 03. 08
	 */
	int deleteCustomerSns(Integer custNo);

	/**
	 * 탈퇴정보 삭제
	 *
	 * @param custNo - 고객번호
	 * @return int - 결과
	 * @author jsshin
	 * @since  2021. 03. 08
	 */
	int deleteSecedeCustomer(Integer custNo);

	void createException();
}
