using Adplay.Model;
using Adplay.Utility;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace Adplay.DataContainer
{
    [CreateAssetMenu(fileName = nameof(TextureAds), menuName = PathUtility.DataContainerPath + nameof(TextureAds))]
    public class TextureAds : ScriptableObject
    {
        [field: SerializeField] private List<TextureAdInfo> TextureAdInfos { get; set; } = new();

        public void Clear()
        {
            foreach (var item in TextureAdInfos)
            {
                if (item.Texture2D)
                    Destroy(item.Texture2D);
            }
            TextureAdInfos.Clear();
        }

        public void Add(Creative creative, Texture2D audioClip)
        {
            if (TextureAdInfos.Exists(info => info.Creative.Id == creative.Id))
                return;
            TextureAdInfos.Add(new(creative, audioClip));
        }

        public TextureAdInfo GetSprite(AdType adType)
        {
            return TextureAdInfos.FirstOrDefault(s => s.Creative.Type == adType);
        }


    }

    [System.Serializable]
    public class TextureAdInfo
    {
        public int Id => Creative.Id;
        [field: SerializeField] public Creative Creative { get; private set; }
        [field: SerializeField] public Texture2D Texture2D { get; private set; }
        [field: SerializeField] public Sprite Sprite { get; private set; }
        public TextureAdInfo(Creative creative, Texture2D texture)
        {
            Creative = creative;
            Texture2D = texture;
            Sprite = texture ? texture.TextureToSprite() : null;
        }
    }
}