package com.style24.front.biz.dao;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.Login;
import com.style24.persistence.domain.PersistentToken;

/**
 * 로그인 Dao
 * 
 * @author gagamel
 * @since 2020. 9. 11
 */
@ShopDs
public interface TsfLoginDao {

	/**
	 * 로그인체크정보 조회
	 * @param login - 로그인 정보
	 * @return
	 * @author gagamel
	 * @date 2020. 2. 3
	 */
	Login getLoginCheckInfo(Login login);

	/**
	 * 로그인실패 남기기
	 * @param login - 로그인 정보
	 * @author gagamel
	 * @date 2020. 2. 3
	 */
	void createLoginFail(Login login);

	/**
	 * 로그인 실패건수 조회
	 * @param login - 로그인 정보
	 * @return 로그인 실패건수
	 * @author gagamel
	 * @date 2020. 2. 3
	 */
	int getLoginFailCount(Login login);

	/**
	 * 로그인실패정보 조회
	 * @param login - 로그인 정보
	 * @author gagamel
	 * @since 2021. 2. 16
	 */
	Login getLoginFailInfo(Login login);

	/**
	 * 최종로그인일시 Update
	 * @param custNo - 고객번호
	 * @author gagamel
	 * @date 2020. 2. 3
	 */
	void updateLastLoginDate(Integer custNo);

	/**
	 * 로그인이력 남기기
	 * @param login - 로그인 정보
	 * @author gagamel
	 * @date 2020. 2. 3
	 */
	void createLoginHistory(Login login);

//	/**
//	 * 로그인 세션정보 조회
//	 * @param customer - 고객정보
//	 * @return 로그인 세션정보
//	 * @author gagamel
//	 * @date 2020. 2. 3
//	 */
//	Login getLoginSessionInfo(FoLogin customer);

	/**
	 * 로그인유지토큰 생성
	 * @param token - 토큰 정보
	 * @author gagamel
	 * @since 2020. 6. 17
	 */
	void createPersistentToken(PersistentToken token);

	/**
	 * 로그인유지토큰 가져오기
	 * @param remembermeToken - RememberMe토큰
	 * @return
	 * @author gagamel
	 * @since 2020. 6. 17
	 */
	PersistentToken getPersistentToken(String remembermeToken);

	/**
	 * 로그인유지토큰 갱신
	 * @param token - 토큰 정보
	 * @author gagamel
	 * @since 2020. 6. 17
	 */
	void updatePersistentToken(PersistentToken token);

	/**
	 * 로그인유지토큰 삭제
	 * @param remembermeToken - RememberMe토큰
	 * @author gagamel
	 * @since 2020. 6. 17
	 */

	void deletePersistentToken(String remembermeToken);
	/**
	 * 로그인실패 건수가 10회 이상이고 3분 지났으면 실패횟수 초기화
	 * @param login - 고객ID(=로그인ID)
	 * @author jsshin
	 * @since 2021. 03. 31
	 */
	void updateLoginFailInfo(Login login);
}
