using System;
using System.Collections.Generic;
using System.IO;
using ThirdParty.DownloadSystem;
using UnityEngine;

namespace ThirdParty
{
    /// <summary>
    /// 和热更包里面同步的类容
    /// </summary>
    public class HotSyncContent
    {
        /// <summary>
        /// 资源服地址
        /// </summary>
        public static string AssetURL = "http://129.204.254.216:8080/resource/010test";

        public static string Currversion;
        public static bool isOpenHotFix;
        public static bool isOpenDllStreamingLoad;

        public static int assetsVer;
        private static string m_rootStreamingURL;

        public static string RootStreamingURL
        {
            get
            {
                m_rootStreamingURL = Application.streamingAssetsPath;

#if UNITY_EDITOR

#elif UNITY_IPHONE
         m_rootStreamingURL = "file://" + m_rootStreamingURL;

#endif
                return m_rootStreamingURL;
            }
        }

    

// #if UNITY_EDITOR
//         public static string platform = "Android";
//         // public static string platform = "PC";
// #elif UNITY_IOS
        /// <summary>
        /// 1= 本地模式
        /// </summary>
        public static int loadType;
#if UNITY_IOS
        public static string platform = "iOS";
#elif UNITY_ANDROID
        public static string platform = "Android";
#else
        public static string platform = "Android";
#endif
        public static IDownloadUI DownloadUI;

        /// <summary>
        ///应用程序外部资源路径存放路径(热更新资源路径)
        /// </summary>
        public static string AppHotfixResPath
        {
            get
            {
                if (!Directory.Exists($"{Application.persistentDataPath}/Dll/"))
                {
                    Debug.Log("创建目录：" + $"{Application.persistentDataPath}/Dll/");
                    Directory.CreateDirectory($"{Application.persistentDataPath}/Dll/");
                }

                return $"{Application.persistentDataPath}/Dll/";
            }
        }

        /// <summary>
        /// 先从热更路径读取（表示已经热更过），在从内部路径读取（Application.streamingAssetsPath不能用File.Exists判断，无效）
        /// </summary>
        /// <param name="resourceName"></param>
        /// <returns></returns>
        public static string GetResPath(string resourceName)
        {
            string p = Path.Combine(AppHotfixResPath, resourceName);
            if (!File.Exists(p))
            {
                p = Path.Combine(Application.streamingAssetsPath, resourceName);
            }

            return p;
        }

        public static string GetWebRequestPath(string resourceName)
        {
            string p = GetResPath(resourceName);
            // webRequest要加file://
            if (!p.Contains("://"))
            {
                p = "file://" + p;
            }

            return p;
        }

        public static string GetDllWebRequestPath(string resourceName)
        {
            string p = Path.Combine(AppHotfixResPath, resourceName);
            if (!File.Exists(p))
            {
                p = Path.Combine(RootStreamingURL + "/Dll/", resourceName);
            }
#if !UNITY_EDITOR
            // webRequest要加file://
            if (!p.Contains("://"))
            {
                p = "file://" + p;
            }
#endif
            return p;
        }

        /// <summary>
        /// 需要热更的的dll资源
        /// </summary>
        public static List<string> HotFixDll { get; } = new List<string>()
        {
            "init", //这个是进入热更场景的入口
            "Fort23.Proto.dll",
            "Fort23.Core.dll",
            "Fort23.GameData.dll",
            "Fort23.CombatCore.dll",
            "Fort23.UTool.dll",
            "Fort23.Combat.dll",
            "Fort23.Mono.dll",
            "spine-unity.dll",
            "spine-timeline.dll",
            "Assembly-CSharp.dll",
        };

        /// <summary>
        /// 需要补充元数据的泛型函数实例化的dll（注意，不要把热更dll放在这里了。）
        /// </summary>
        public static List<string> AOTMetaAssemblyNames { get; } = new List<string>()
        {
            "mscorlib.dll",
            "System.dll",
            "System.Core.dll",
            "spine-csharp.dll",
            "Newtonsoft.Json.dll",
            "Unity.Timeline.dll",
            "UnityEngine.CoreModule.dll",
            "ThirdParty.dll"
        };
    }

    // [Serializable]
    // public class AssetMD5Info
    // {
    //     public List<MD5FileInfo> fileInfo;
    // }
    //
    // [Serializable]
    // public class MD5FileInfo
    // {
    //     public string fileName;
    //     public string md5;
    //
    //     public long size;
    //
    //     // TODO 暂时不验证
    //     public string md5Verification;
    // }
}