﻿using UnityEngine;
using Array = System.Array;

namespace JLGames.RocketDriver.Games.Service.Preload
{
    [CreateAssetMenu(fileName = "PreloadSettings", menuName = "RocketDriver/Preload Settings", order = 11)]
    public class PreloadSettings : ScriptableObject
    {
        [Tooltip("预加载Bundle列表")] [SerializeField]
        private PreloadBundle[] m_PreloadBundles;

        public int BundleSize => m_PreloadBundles?.Length ?? 0;

        public PreloadBundle[] PreloadBundles
        {
            get
            {
                if (null == m_PreloadBundles || m_PreloadBundles.Length == 0)
                {
                    return null;
                }

                return (PreloadBundle[])m_PreloadBundles.Clone();
            }
        }

        public string[] PreloadBundleNames
        {
            get
            {
                if (null == m_PreloadBundles || m_PreloadBundles.Length == 0)
                {
                    return null;
                }

                var rs = new string[m_PreloadBundles.Length];
                for (var index = 0; index < m_PreloadBundles.Length; index++)
                {
                    rs[index] = m_PreloadBundles[index].Name;
                }

                return rs;
            }
        }

        public bool CheckInPreloadList(string abName)
        {
            return null != GetPreloadSetting(abName);
        }

        public PreloadBundle GetPreloadSetting(string abName)
        {
            if (null == m_PreloadBundles || m_PreloadBundles.Length == 0) return null;
            return Array.Find(m_PreloadBundles, setting => setting.Name == abName);
        }

        public PreloadBundle GetPreloadSetting(int index)
        {
            if (null == m_PreloadBundles || m_PreloadBundles.Length == 0 || index < 0 || index >= m_PreloadBundles.Length) return null;
            return m_PreloadBundles[index];
        }

        public bool CheckValidity()
        {
            if (null == m_PreloadBundles || m_PreloadBundles.Length == 0) return true;
            foreach (var o in m_PreloadBundles)
            {
                if (string.IsNullOrEmpty(o.Name)) return false;
            }

            return true;
        }
    }
}