using System;
using UnityEngine;

namespace BansheeGz.BGDatabase
{
    public class BGDatabaseMTAssetsLoaderSync : BGDatabaseMTAssetsLoaderI
    {
        private readonly bool validateLoadedAsset;
        private readonly Action onFinished;
        public BGDatabaseMTAssetsLoaderSync(bool validateLoadedAsset, Action onFinished)
        {
            this.validateLoadedAsset = validateLoadedAsset;
            this.onFinished = onFinished;
        }

        public void Load()
        {
            //iterate all  asset fields and call getValue once to cache results
            BGRepo.I.ForEachMeta(meta => meta.ForEachField(field =>
            {
                for (var i = 0; i < meta.CountEntities; i++)
                {
                    var asset = field.GetValue(i);
                    if (validateLoadedAsset && asset == null)
                    {
                        var path = ((BGStorable<string>)field).GetStoredValue(i);
                        if (!string.IsNullOrEmpty(path)) Debug.Log($"Assets preloader WARNING: " +
                                                                   $"Asset can not be loaded for the entity #={i} field={field.FullName} with invalid path={path}");
                    }
                }
            }, field => field is BGAssetLoaderA.WithLoaderI));

            onFinished?.Invoke();
        }

        public int PendingRequests => 0;
    }
}