using Newtonsoft.Json;
using System.Collections.Generic;

namespace UVC.Locale
{
    /// <summary>
    /// JSON 형식의 다국어 데이터를 담는 클래스입니다.
    /// 이 클래스는 "languages" 섹션과 "words" 섹션으로 구성된 JSON 파일의 전체 구조에 해당합니다.
    /// </summary>
    /// <example>
    /// JSON 파일 예시 (`locale.json`):
    /// <code>
    /// {
    ///   "languages": {
    ///     "en-US": "English",
    ///     "ko-KR": "한국어"
    ///   },
    ///   "words": {
    ///     "error": {
    ///       "ko-KR": "에러",
    ///       "en-US": "Error"
    ///     },
    ///     "button_ok": {
    ///       "ko-KR": "확인",
    ///       "en-US": "OK"
    ///     }
    ///   }
    /// }
    /// </code>
    /// </example>
    public class LocalizationDataSource
    {

        /// <summary>
        /// 지원하는 언어의 코드와 표시 이름을 저장하는 딕셔너리입니다.
        /// 키는 언어 코드(예: "en-US", "ko-KR")이며, 값은 해당 언어의 표시 이름(예: "English", "한국어")입니다.
        /// </summary>
        /// <example>
        /// <code>
        /// // Languages["en-US"] -> "English"
        /// </code>
        /// </example>
        [JsonProperty("languages")]
        public Dictionary<string, string> Languages { get; set; }

        ////// <summary>
        /// 실제 번역 데이터를 저장하는 딕셔너리입니다.
        /// 첫 번째 키는 번역 키(예: "error", "button_ok")이며,
        /// 값은 해당 번역 키에 대한 언어별 번역 문자열을 담는 또 다른 딕셔너리입니다.
        /// 이 내부 딕셔너리의 키는 언어 코드(예: "en-US", "ko-KR")이고, 값은 번역된 텍스트입니다.
        /// </summary>
        /// <example>
        /// <code>
        /// // Words["error"]["en-US"] -> "Error"
        /// </code>
        /// </example>
        [JsonProperty("words")]
        public Dictionary<string, Dictionary<string, string>> Words { get; set; }

        /// <summary>
        /// <see cref="LocalizationDataSource"/> 클래스의 새 인스턴스를 초기화합니다.
        /// <see cref="Languages"/> 및 <see cref="Words"/> 딕셔너리를 빈 상태로 생성합니다.
        /// </summary>
        public LocalizationDataSource()
        {
            Languages = new Dictionary<string, string>();
            Words = new Dictionary<string, Dictionary<string, string>>();
        }
    }
}
