package com.madeu.util;

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

import org.springframework.stereotype.Component;

@Component
public class Snake2Camel {

    /**
     * Map 내 모든 key를 스네이크 케이스(snake_case)에서 카멜 케이스(camelCase)로 변환한 새 Map 반환
     */
    public static Map<String, Object> convertKeysToCamelCase(Map<String, Object> originalMap) {
        Map<String, Object> resultMap = new HashMap<>();
        for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
            String camelKey = toCamelCase(entry.getKey());
            resultMap.put(camelKey, entry.getValue());
        }
        return resultMap;
    }

    /**
     * snake_case 문자열을 camelCase 문자열로 변환
     * 예: "user_name" -> "userName"
     */
    public static String toCamelCase(String snakeCase) {
        if (snakeCase == null || snakeCase.isEmpty()) {
            return snakeCase;
        }

        snakeCase = snakeCase.toLowerCase(); // 1단계: 모두 소문자로 변환 → CATEGORY_NM → category_nm

        StringBuilder sb = new StringBuilder();
        boolean nextUpper = false;
        for (int i = 0; i < snakeCase.length(); i++) {
            char c = snakeCase.charAt(i);
            if (c == '_') {
                nextUpper = true; // 언더바 다음 문자 대문자로 변환 플래그
            } else {
                if (nextUpper) {
                    sb.append(Character.toUpperCase(c));
                    nextUpper = false;
                } else {
                    sb.append(c);
                }
            }
        }
        return sb.toString();
    }
}