package egovframework.constant;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * packageName    : go.kr.project.common.constant
 * fileName       : FileContentTypeConstants
 * author         : 개발자
 * date           : 2025-05-17
 * description    : 파일 확장자에 따른 MIME 타입을 정의하는 상수 클래스
 * ===========================================================
 * DATE              AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2025-05-17        개발자       최초 생성
 */
public class FileContentTypeConstants {

    /**
     * 기본 MIME 타입 (알 수 없는 파일 형식)
     */
    public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
    
    /**
     * 파일 확장자와 MIME 타입 매핑
     */
    private static final Map<String, String> CONTENT_TYPE_MAP;
    
    static {
        Map<String, String> map = new HashMap<>();
        
        // 이미지 파일
        map.put("jpg", "image/jpeg");
        map.put("jpeg", "image/jpeg");
        map.put("png", "image/png");
        map.put("gif", "image/gif");
        
        // 문서 파일
        map.put("pdf", "application/pdf");
        map.put("doc", "application/msword");
        map.put("docx", "application/msword");
        map.put("xls", "application/vnd.ms-excel");
        map.put("xlsx", "application/vnd.ms-excel");
        map.put("ppt", "application/vnd.ms-powerpoint");
        map.put("pptx", "application/vnd.ms-powerpoint");
        map.put("txt", "text/plain");
        
        CONTENT_TYPE_MAP = Collections.unmodifiableMap(map);
    }
    
    /**
     * 파일 확장자에 따른 MIME 타입을 반환합니다.
     * 
     * @param fileExt 파일 확장자 (소문자)
     * @return MIME 타입
     */
    public static String getContentType(String fileExt) {
        if (fileExt == null || fileExt.isEmpty()) {
            return DEFAULT_CONTENT_TYPE;
        }
        
        return CONTENT_TYPE_MAP.getOrDefault(fileExt.toLowerCase(), DEFAULT_CONTENT_TYPE);
    }
}