package sgc.portal.base.i18n;

import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;

import java.util.Locale;

/**
 * <pre>
 * 시스템명   : Common
 * 프로그램ID : I18nMessage
 * 프로그램명  : I18nMessage
 * 설명 : 다국어 메세지 처리
 * </pre>
 *
 * @author 이범근
 * @version 2019.12.4
 * @see I18nMessage
 * @since JDK1.8
 */
@Getter
@Setter
public class I18nMessage {
    @NonNull
    private String code;

    private Object[] parameters;

    private Locale locale;

    /**
     * Instantiates a new 18 n message.
     *
     * @param code 검색 할 코드
     */
    public I18nMessage(String code) {
        this(code, null, new Object[] {});
    }

    /**
     * Instantiates a new 18 n message.
     *
     * @param code   검색 할 코드
     * @param locale 검색할 로케일
     */
    public I18nMessage(String code, Locale locale) {
        this(code);
    }

    /**
     * Instantiates a new 18 n message.
     *
     * @param code       검색 할 코드
     * @param parameters 메세지 내의 parameters (parameters는 메세지 내의 "{0}", "{1,date}", "{2,time}"와 같이)에 기입 해지는 인수의 배열.
     */
    public I18nMessage(String code, Object... parameters) {
        this(code, null, parameters);
    }

    /**
     * Instantiates a new 18 n message.
     *
     * @param code       검색 할 코드
     * @param locale     검색할 로케일
     * @param parameters 메세지 내의 parameters (parameters는 메세지 내의 "{0}", "{1,date}", "{2,time}"와 같이)에 기입 해지는 인수의 배열.
     */
    private I18nMessage(String code, Locale locale, Object... parameters) {
        this.code = code;
        this.locale = locale;
        this.parameters = parameters.clone();
    }

    /**
     * Sets parameters.
     *
     * @param parameters 메세지 내의 parameters (parameters는 메세지 내의 "{0}", "{1,date}", "{2,time}"와 같이)에 기입 해지는 인수의 배열.
     */
    public void setParameters(Object... parameters) {
        this.parameters = parameters.clone();
    }
}
