package com.spring.common.converter;

import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

/**
 * 커스텀 HTTP 메시지 변환기 클래스입니다.
 * 
 * <p>이 클래스는 Spring의 MappingJackson2HttpMessageConverter를 확장하여
 * JSON 데이터의 직렬화 및 역직렬화를 처리합니다.</p>
 * 
 * <p>Java 8의 날짜 및 시간 API를 지원하기 위해 JavaTimeModule을 등록합니다.</p>
 * 
 * @author mindol
 * @version 1.0
 */
public class CommHttpMessageConverter extends MappingJackson2HttpMessageConverter {

    /**
     * 기본 생성자입니다.
     * 
     * <p>주어진 ObjectMapper를 사용하여 CommHttpMessageConverter를 초기화합니다.</p>
     * 
     * <p>JavaTimeModule을 등록하여 Java 8의 날짜 및 시간 API를 지원합니다.</p>
     * 
     * @param objectMapper JSON 변환에 사용할 ObjectMapper
     */
    public CommHttpMessageConverter(ObjectMapper objectMapper) {
        super(objectMapper);
        objectMapper.registerModule(new JavaTimeModule());
        setObjectMapper(objectMapper);
    }

    /**
     * 주어진 클래스 타입과 미디어 타입에 대해 이 변환기가 쓸 수 있는지 확인합니다.
     * 
     * <p>미디어 타입이 지원되는 경우 true를 반환합니다.</p>
     * 
     * @param clazz 변환할 클래스 타입
     * @param mediaType 변환할 미디어 타입
     * @return 지원하는 경우 true, 그렇지 않으면 false
     */
    @Override
    public boolean canWrite(@NonNull Class<?> clazz, @Nullable MediaType mediaType) {
        return canWrite(mediaType);
    }
    
}
