﻿using JLGames.RocketDriver.CSharp.Event;

namespace JLGames.RocketDriver.Actions.i18n
{
    public interface II18NManager : IEventDispatcher
    {
        /// <summary>
        /// Register
        /// 注册表
        /// </summary>
        I18NRegister Register { get; }

        /// <summary>
        /// Clear all
        /// 清除全部
        /// </summary>
        void ClearData();

        /// <summary>
        /// Reload data according to the settings in Register
        /// 根据Register中设置重新加载数据
        /// </summary>
        void LoadData();

        /// <summary>
        /// Load data from configuration assets
        /// 从配置资产中加载数据
        /// </summary>
        /// <param name="settings"></param>
        void LoadDataFromSettings(I18NSettings settings);

        /// <summary>
        /// Append data
        /// 追加数据
        /// </summary>
        /// <param name="fileKey"></param>
        /// <param name="langName"></param>
        /// <param name="data"></param>
        void AppendData(string fileKey, string langName, string data);

        /// <summary>
        /// Check exist
        /// 判断是否存在
        /// </summary>
        /// <param name="fileKey"></param>
        /// <param name="langName"></param>
        /// <returns></returns>
        bool Contains(string fileKey, string langName);

        /// <summary>
        /// Get data, use default language and default file
        /// 取数据，使用默认语言，默认文件
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        string GetValue(string id);

        /// <summary>
        /// Get data, use default language
        /// 取数据，使用默认语言
        /// </summary>
        /// <param name="id"></param>
        /// <param name="fileKey"></param>
        /// <returns></returns>
        string GetValue(string id, string fileKey);

        /// <summary>
        /// Get data
        /// 取数据
        /// </summary>
        /// <param name="id"></param>
        /// <param name="fileKey"></param>
        /// <param name="langName"></param>
        /// <returns></returns>
        string GetValue(string id, string fileKey, string langName);

        /// <summary>
        /// Get Internationalized Content, use default language and default file
        /// 获取国际化后的内容, 使用默认语言，默认文件
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        string GetContent(string content);

        /// <summary>
        /// Get Internationalized Content, use default language
        /// 获取国际化后的内容, 使用默认语言
        /// </summary>
        /// <param name="content"></param>
        /// <param name="fileKey"></param>
        /// <returns></returns>
        string GetContent(string content, string fileKey);

        /// <summary>
        /// Get Internationalized Content
        /// 获取国际化后的内容
        /// </summary>
        /// <param name="content"></param>
        /// <param name="fileKey"></param>
        /// <param name="langName"></param>
        /// <returns></returns>
        string GetContent(string content, string fileKey, string langName);

#if UNITY_EDITOR
        /// <summary>
        /// Print internationalization information
        /// 打印国际化信息
        /// </summary>
        void PrintInfos();
#endif
    }
}