package com.spring.common.config;

import java.util.List;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.lang.NonNull;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.spring.common.converter.CommHttpMessageConverter;

import lombok.RequiredArgsConstructor;

/**
 * 웹 애플리케이션의 설정을 정의하는 구성 클래스입니다.
 * 
 * <p>이 클래스는 Spring MVC의 웹 설정을 구성하며, HTTP 메시지 변환기와 같은
 * 웹 관련 빈을 설정합니다.</p>
 * 
 * <p>주요 기능:</p>
 * <ul>
 *   <li>커스텀 HTTP 메시지 변환기 등록</li>
 *   <li>Spring MVC의 기본 설정을 확장</li>
 * </ul>
 * 
 * @author mindol
 * @version 1.0
 */
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {

    /**
     * Jackson ObjectMapper 객체입니다.
     * 
     * <p>JSON 데이터의 직렬화 및 역직렬화에 사용됩니다.</p>
     */
    private final ObjectMapper objectMapper;

    /**
     * HTTP 메시지 변환기를 확장합니다.
     * 
     * <p>기본 HTTP 메시지 변환기 목록에 커스텀 변환기를 추가합니다.</p>
     * 
     * @param converters HTTP 메시지 변환기 목록
     */
    @Override
    public void extendMessageConverters(@NonNull List<HttpMessageConverter<?>> converters) {
        converters.add(0, new CommHttpMessageConverter(objectMapper));
    }
    
}
