using UnityEngine;
using Guru;
using NUnit.Framework;
namespace Guru.Editor
{
    using System.IO;
    using UnityEditor;
    using Guru.LitJson;
    
    public class EditorGuruServiceIO
    {
        private static readonly string DefaultFileName = "guru-service";
        private static string DefaultFilePath =
            Path.GetFullPath(Path.Combine(Application.dataPath, $"{DefaultFileName}.json"));
        internal static string EmbededServiceFilePath = "";
        /// 
        /// 加载配置
        /// 
        /// 
        public static GuruServicesConfig LoadConfig()
        {
            var a = AssetDatabase.FindAssets($"*{DefaultFileName}* t:TextAsset");
            if (a == null || a.Length == 0)
            {
                Debug.Log($"--- Can't ind guru-services file");
            }
            else
            {
                var p = AssetDatabase.GUIDToAssetPath(a[0]);
                var fp = Path.GetFullPath(p);
                if (File.Exists(fp)) EmbededServiceFilePath = fp;
                var t = AssetDatabase.LoadAssetAtPath(p);
                // Debug.Log($"--- find services file:{p} \n{t.text}");
                return JsonMapper.ToObject(t.text);
            }
            return null;
        }
        /// 
        /// 保存配置
        /// 
        /// 
        internal static void SaveConfig(GuruServicesConfig config = null)
        {
            if (config == null)
            {
                config = new GuruServicesConfig();    
            }
            var jw = new JsonWriter()
            {
                PrettyPrint = true,
            };
            JsonMapper.ToJson(config, jw);
            var json = jw.ToString();
            if (string.IsNullOrEmpty(EmbededServiceFilePath)) EmbededServiceFilePath = DefaultFilePath;
            File.WriteAllText(EmbededServiceFilePath, json);
            Debug.Log($"Save config to {EmbededServiceFilePath}");
        }
        /// 
        /// 创建空配置
        /// 
        /// 
        internal static GuruServicesConfig CreateEmpty()
        {
            var cfg = new GuruServicesConfig();
            cfg.version = 0;
            cfg.app_settings = new GuruAppSettings();
            cfg.ad_settings = new GuruAdSettings();
            cfg.adjust_settings = new GuruAdjustSettings();
            cfg.fb_settings = new GuruFbSettings();
            return cfg;
        }
        [Test]
        public static void Test_SaveConfig()
        {
            var cfg = CreateEmpty(); 
            SaveConfig(cfg);
        }
        public static void DeployAppServiceFile()
        {
            var streamingPath = Application.streamingAssetsPath;
            if(!Directory.Exists(streamingPath)) Directory.CreateDirectory(streamingPath);
            var path = Path.Combine(streamingPath, $"{GuruSDK.ServicesConfigKey}.{GuruSDK.ServicesConfigExtension}");
            var config = LoadConfig();
            var from = EmbededServiceFilePath;
            if (string.IsNullOrEmpty(from) || !File.Exists(from)) // 文件不存在
            {
                return;
            }
            if (null != config)
            {
                if (File.Exists(path)) File.Delete(path);
                Debug.Log($" --- setup {GuruSDK.ServicesConfigKey} file on streamingPath");
                File.Copy(from, path);
            }
        }
    }
}