package com.takensoft.cms.mber.service;

import com.takensoft.cms.mber.vo.LgnHstryVO;
import com.takensoft.cms.mber.vo.MberVO;

import jakarta.servlet.http.HttpServletRequest;
import java.util.HashMap;

/**
 * @author takensoft
 * @since 2024.04.09
 * @modification
 *     since    |    author    | description
 *  2024.04.09  |  takensoft   | 최초 등록
 *  2025.06.18  |  takensoft   | 로그인 이력 저장 메서드 추가 및 통합
 *
 * 로그인 이력 정보 관련 인터페이스 - 통합 로그인 이력 저장 기능 추가
 */
public interface LgnHstryService {

    /**
     * @param lgnHstryVO - 로그인 이력 정보
     * @return int - 로그인 이력 결과
     *
     * 로그인 이력 등록 (기존 메서드)
     */
    int LgnHstrySave(LgnHstryVO lgnHstryVO);

    /**
     * @param mber - 회원 정보
     * @param request - HTTP 요청 객체
     * @param loginType - 로그인 타입 ("SYSTEM", "OAUTH2", etc.)
     * @return int - 로그인 이력 저장 결과
     *
     * 통합 로그인 이력 저장 메서드 - 모든 로그인 방식에서 사용
     */
    int saveLoginHistory(MberVO mber, HttpServletRequest request, String loginType);

    /**
     * @param mber - 회원 정보
     * @param request - HTTP 요청 객체
     * @return int - 로그인 이력 저장 결과
     *
     * 시스템 로그인 이력 저장
     */
    int saveSystemLoginHistory(MberVO mber, HttpServletRequest request);

    /**
     * @param mber - 회원 정보
     * @param request - HTTP 요청 객체
     * @param provider - OAuth2 제공자 (kakao, naver, google 등)
     * @return int - 로그인 이력 저장 결과
     *
     * OAuth2 로그인 이력 저장
     */
    int saveOAuth2LoginHistory(MberVO mber, HttpServletRequest request, String provider);

    /**
     * @param params -회원정보
     * @return HashMap<String, Object>
     *  - list : 로그인 이력 목록
     *  - pagination : 페이징 정보
     *  - codeList : 공통 코드 조회(로그인이력)
     *
     * 로그인 이력 목록 조회
     */
    HashMap<String, Object> lgnHstryList(HashMap<String, String> params);
}