using Adplay.Model;
using Adplay.Utility;
using Adplay.View;
using System.Threading.Tasks;
using UnityEngine;

namespace Adplay.Behaviours.Actions
{
    public class AdPlayPopUp : AdPlayAction
    {
        public async override Task<AdRequestInfo> GetAd(AdPlayTemplate template)
        {
            if (template.Image == null)
            {
                Debug.LogError($"Adplay popup request failed: Image is null");
                return new AdRequestInfo(AdRequestResultState.MissingRequiredComponent, "Adplay popup request failed: Image is null");
            }
            if (template.ClickButton == null)
            {
                Debug.LogError($"Adplay popup request failed: ClickButton is null");
                return new AdRequestInfo(AdRequestResultState.MissingRequiredComponent, "Adplay popup request failed: ClickButton is null");
            }
            if (template.RectTransform == null)
            {
                Debug.LogError($"Adplay popup request failed: RectTransform is null");
                return new AdRequestInfo(AdRequestResultState.MissingRequiredComponent, "Adplay popup request failed: RectTransform is null");
            }

            var ad = activeAds.GetActiveAd(AdType.Popup);
            int counter = 0;
            while (ad == null && counter < 10)
            {
                await Task.Delay(AdPlayUtility.DelayMilliTime);
                ad = activeAds.GetActiveAd(AdType.Popup);
                counter++;
            }
            if (ad == null)
            {
                return new AdRequestInfo(AdRequestResultState.NoActiveAd);
            }

            Sprite sprite = ad.Sprite;
            template.Hide();

            template.SetSprite(sprite);
            engagementData.CreateEngagement(ad.Id, EngagementType.IMP, ad.Creative);
            template.AddClick(() =>
            {
                engagementData.CreateEngagement(IdGenerator.NewId(), EngagementType.CLK, ad.Creative);
                Application.OpenURL(ad.Creative.ClickUrl);
            });

            template.Show();


            if (template.TitleText != null)
            {
                template.TitleText.text = ExtractExtraOption(ad.Creative, AdExtraOptionType.PopUpPageTitle);
            }

            if (template.DescriptionText != null)
            {
                template.DescriptionText.text = ExtractExtraOption(ad.Creative, AdExtraOptionType.PopUpPageDescription);
            }

            if (template.ClickButtonText != null)
            {
                template.ClickButtonText.text = ExtractExtraOption(ad.Creative, AdExtraOptionType.PopUpPageClickButtonText);
            }


            return new AdRequestInfo(AdRequestResultState.Success);

        }


    }
}
