package incheon.com.security.service;

import incheon.com.security.vo.LoginVO;

import java.util.List;

/**
 * 보안 인증용 사용자 서비스 인터페이스
 */
public interface SecurityUserService {
    
    /**
     * 사용자 ID로 사용자 정보 조회 (로그인용)
     */
    LoginVO getUserById(String userId);
    
    /**
     * 모든 활성 사용자 목록 조회 (로그인 선택용)
     */
    List<LoginVO> getAllActiveUsers();
    
    /**
     * 사용자 권한 역할 매핑 (부서/직급 기반)
     */
    String getUserRole(String userId, String deptCd, String jbgdCd);

    /**
     * 사용자 정보와 권한을 함께 조회 (로그인 시 사용)
     * - 기본 사용자 정보
     * - 시스템별 권한 목록
     * - 정규/임시 역할 목록
     * - Spring Security Authority 변환
     *
     * @param userId 사용자 ID
     * @return 권한 정보가 포함된 LoginVO
     */
    LoginVO getUserWithAuthrts(String userId);

    /**
     * 사용자 세션 정보 업데이트 (로그인 시간 등)
     * @param userId 사용자 ID
     */
    void updateUserSession(String userId);

    /**
     * 현재 세션의 권한 정보를 DB에서 다시 로딩하여 갱신
     * - 역할이 동적으로 할당된 경우 호출
     * - 세션의 LoginVO와 SecurityContextHolder 모두 갱신
     *
     * @param session HTTP 세션
     * @param userId 사용자 ID
     * @return true: 갱신 성공, false: 실패
     */
    boolean refreshSessionAuthrts(javax.servlet.http.HttpSession session, String userId);
}
