package egovframework.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * packageName    : egovframework.filter
 * fileName       : SessionRefreshFilter
 * author         : 박성영
 * date           : 25. 5. 21.
 * description    : 세션 갱신을 위한 필터
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 25. 5. 21.        박성영       최초 생성
 */
@Slf4j
@Component
public class SessionRefreshFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        
        // 배치 작업 경로는 세션 리프레시에서 제외
        String requestURI = httpRequest.getRequestURI();
        if (requestURI != null && requestURI.startsWith("/batch/")) {
            chain.doFilter(request, response);
            return;
        }

        try {
            // 세션이 있으면 접근하여 갱신 (세션 타임아웃 연장)
            httpRequest.getSession(false);
            
            // 디버깅 용도 (필요시 주석 해제)
            // if (httpRequest.getSession().getAttribute("sessionVO") != null) {
            //     log.debug("세션 리프레시 - 세션 정보 존재");
            // } else {
            //     log.debug("세션 리프레시 - 세션 정보 없음");
            // }
        } catch (Exception e) {
            // 세션 관련 오류 발생 시 로그만 남기고 계속 진행
            log.debug("세션 리프레시 중 오류 발생: {}", e.getMessage());
        }
        
        chain.doFilter(request, response);
    }
}
