package egovframework.util;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * packageName    : egovframework.util
 * fileName       : PathUtil
 * author         : 개발자
 * date           : 2023-06-10
 * description    : 경로 관련 유틸리티 클래스
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023-06-10        개발자       최초 생성
 */
public class PathUtil {

    /**
     * 현재 애플리케이션의 contextPath를 반환합니다.
     * 
     * @return contextPath 문자열 (예: "/app")
     */
    public static String getContextPath() {
        try {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            return request.getContextPath();
        } catch (Exception e) {
            // RequestContextHolder가 사용 불가능한 경우 (예: 배치 작업 등)
            return "";
        }
    }

    /**
     * 주어진 URL에 contextPath를 추가합니다.
     * 이미 contextPath가 포함된 경우 또는 외부 URL인 경우 원래 URL을 반환합니다.
     * 
     * @param url contextPath를 추가할 URL
     * @return contextPath가 추가된 URL
     */
    public static String addContextPath(String url) {
        if (url == null || url.isEmpty()) {
            return "";
        }
        
        // 외부 URL인 경우 (http:// 또는 https://로 시작하는 경우)
        if (url.startsWith("http://") || url.startsWith("https://")) {
            return url;
        }
        
        String contextPath = getContextPath();
        
        // URL이 이미 contextPath로 시작하는 경우
        if (!contextPath.isEmpty() && url.startsWith(contextPath)) {
            return url;
        }
        
        // URL이 /로 시작하지 않는 경우 /를 추가
        if (!url.startsWith("/")) {
            url = "/" + url;
        }
        
        return contextPath + url;
    }
}