package go.kr.project.login.service;

import go.kr.project.login.model.LoginUserVO;
import go.kr.project.login.model.SessionVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * packageName    : go.kr.project.login.service
 * fileName       : LoginService
 * author         : 시스템 관리자
 * date           : 2025-05-13
 * description    : 로그인 관련 서비스 인터페이스
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2025-05-13        시스템 관리자       최초 생성
 */
public interface LoginService {

    /**
     * 로그인 처리
     * @param userAcnt 사용자 계정
     * @param passwd 비밀번호
     * @param request HTTP 요청 객체
     * @param response HTTP 응답 객체
     * @return 로그인 성공 시 SessionVO 객체, 실패 시 null
     * @throws Exception 예외 발생 시
     */
    SessionVO login(String userAcnt, String passwd, HttpServletRequest request, HttpServletResponse response) throws Exception;

    /**
     * 로그아웃 처리
     * @param request HTTP 요청 객체
     * @param response HTTP 응답 객체
     * @throws Exception 예외 발생 시
     */
    void logout(HttpServletRequest request, HttpServletResponse response) throws Exception;

    /**
     * 현재 세션 정보 조회
     * @param request HTTP 요청 객체
     * @return 세션 정보
     * @throws Exception 예외 발생 시
     */
    SessionVO getSessionInfo(HttpServletRequest request) throws Exception;

    /**
     * 방문자 세션 생성
     * @param request HTTP 요청 객체
     * @return 방문자 세션 정보
     * @throws Exception 예외 발생 시
     */
    SessionVO createVisitorSession(HttpServletRequest request) throws Exception;

    /**
     * 비밀번호 실패 처리
     * @param user 사용자 정보
     * @return 업데이트된 사용자 정보
     * @throws Exception 예외 발생 시
     */
    LoginUserVO handlePasswordFailure(LoginUserVO user) throws Exception;

    /**
     * 비밀번호 잠금 해제
     * @param userId 사용자 ID
     * @return 성공 여부
     * @throws Exception 예외 발생 시
     */
    boolean unlockPassword(String userId) throws Exception;
}