#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using Yodo1.MAS;
using UnityEngine.SceneManagement;

public class Yodo1EditorAds : MonoBehaviour
{
    /// <summary>
    /// Landing page opened when the user clicks an ad in the Unity Editor
    /// test ads. Single source of truth for the editor click-through URL.
    /// </summary>
    public const string EditorAdClickURL = "https://www.yodo1.com/";

    public static GameObject AdHolder;
    public static Canvas AdHolderCanvas;
    public static int HighestOrder = 32767;
    private static Dictionary<string, GameObject> BannerSampleAdEditor;
    private static Dictionary<string, GameObject> NativeSampleAdEditor;
    private static GameObject InterstitialSampleAdEditor;
    private static GameObject RewardedVideoSampleAdEditor;
    private static GameObject RewardedInterstitialSampleAdEditor;
    private static GameObject AppOpenAdsSampleAdEditor;

    public static bool DisableGUI = false;
    public static bool GrantReward = false;
    public static int TotalBannerCount = 0;

    private static GameObject BannerSampleAdEditorTemp;
    private static GameObject NativeSampleAdEditorTemp;

    public static void InitializeAds()
    {
        BannerSampleAdEditor = new Dictionary<string, GameObject>();
        NativeSampleAdEditor = new Dictionary<string, GameObject>();
#if UNITY_2023_2_OR_NEWER
        EventSystem sceneEventSystem = FindFirstObjectByType<EventSystem>();
#else
        EventSystem sceneEventSystem = FindObjectOfType<EventSystem>();
#endif
        if (AdHolder == null)
        {
            AdHolder = Instantiate(Resources.Load("SampleAds/AdHolder") as GameObject);
            AdHolder.name = "Yodo1AdCanvas";
            AdHolderCanvas = AdHolder.transform.GetChild(0).GetComponent<Canvas>();
            AdHolderCanvas.sortingOrder = HighestOrder;
        }
        AdHolder.SetActive(true);
        if (sceneEventSystem == null)
        {
            var eventSystem = new GameObject("EventSystem", typeof(EventSystem), typeof(StandaloneInputModule));
        }

        if (InterstitialSampleAdEditor == null)
        {
            if (AdHolderCanvas != null)
            {
                InterstitialSampleAdEditor = Instantiate(Resources.Load("SampleAds/InterstitialSampleAdPanel") as GameObject, AdHolderCanvas.transform);
                InterstitialSampleAdEditor.transform.SetAsLastSibling();
            }
        }
        if (RewardedVideoSampleAdEditor == null)
        {
            if (AdHolderCanvas != null)
            {
                RewardedVideoSampleAdEditor = Instantiate(Resources.Load("SampleAds/RewardedVideoSampleAdPanel") as GameObject, AdHolderCanvas.transform);
                RewardedVideoSampleAdEditor.transform.SetAsLastSibling();
            }
        }
        if (RewardedInterstitialSampleAdEditor == null)
        {
            if (AdHolderCanvas != null)
            {
                RewardedInterstitialSampleAdEditor = Instantiate(Resources.Load("SampleAds/RewardedInterstitialSampleAdPanel") as GameObject, AdHolderCanvas.transform);
                RewardedInterstitialSampleAdEditor.transform.SetAsLastSibling();
            }
        }
        if (AppOpenAdsSampleAdEditor == null)
        {
            if (AdHolderCanvas != null)
            {
                AppOpenAdsSampleAdEditor = Instantiate(Resources.Load("SampleAds/AppOpenSampleAd") as GameObject, AdHolderCanvas.transform);
                AppOpenAdsSampleAdEditor.transform.SetAsLastSibling();
            }
        }
    }
    public static void ShowStamdardBannerAdsInEditor(string IndexId)
    {
        if (AdHolder == null)
        {
            AdHolder = Instantiate(Resources.Load("SampleAds/AdHolder") as GameObject);
            AdHolder.name = "Yodo1AdCanvas";
            AdHolderCanvas = AdHolder.transform.GetChild(0).GetComponent<Canvas>();
            AdHolderCanvas.sortingOrder = HighestOrder;
        }
        if (BannerSampleAdEditor == null)
        {
            BannerSampleAdEditor = new Dictionary<string, GameObject>();
            AdHolder.SetActive(false);
        }
        GameObject BannerAd;
        if (!BannerSampleAdEditor.TryGetValue(IndexId, out BannerAd))
        {
            if (AdHolderCanvas != null)
            {
                BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/StandardBannerSampleAdPanel") as GameObject, AdHolderCanvas.transform);

                BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchorMin = new Vector2(0.5f, 1f);
                BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchorMax = new Vector2(0.5f, 1f);
                BannerSampleAdEditorTemp.GetComponent<RectTransform>().pivot = new Vector2(0.5f, 1f);
                BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchoredPosition = new Vector2(0f, 0f);
                SetBannerButtonIndexId(BannerSampleAdEditorTemp, IndexId);
                BannerSampleAdEditorTemp.SetActive(true);

                BannerSampleAdEditor.Add(IndexId, BannerSampleAdEditorTemp);
            }
        }
        else
        {
            BannerAd.SetActive(true);
        }
        if (AdHolder.activeSelf)
        {
            Yodo1U3dLog.LogInfo("BannerAd: opened (editor)");
        }


    }
    private static float anchorMinX, anchorMinY, anchorMaxX, anchorMaxY, pivotX, pivotY, anchoredPositionX, anchoredPositionY;
    public static int tempAlign = 0;


    private static void CalculateAnchoringForStandardBanner(int align, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0.5f;
        anchorMinY = 1f;
        anchorMaxX = 0.5f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 1f;
        anchoredPositionX = 0f;
        anchoredPositionY = 0f;
        if ((align & (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter) == (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter)
        {
            anchorMinX = 0.5f;
            anchorMaxX = 0.5f;
            pivotX = 0.5f;
            anchoredPositionX = 0f;

        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerRight) == (int)Yodo1U3dBannerAdPosition.BannerRight)
        {
            anchorMinX = 1f;
            anchorMaxX = 1f;
            pivotX = 0.5f;
            anchoredPositionX = -320f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerLeft) == (int)Yodo1U3dBannerAdPosition.BannerLeft)
        {
            anchorMinX = 0f;
            anchorMaxX = 0f;
            pivotX = 0.5f;
            anchoredPositionX = 320f;
        }

        if ((align & (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter) == (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0f;
            anchoredPositionY = -60f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerBottom) == (int)Yodo1U3dBannerAdPosition.BannerBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 1f;
            anchoredPositionY = 120f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerTop) == (int)Yodo1U3dBannerAdPosition.BannerTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 1f;
            anchoredPositionY = 0f;
        }
    }
    private static void CalculateAnchoringForLargeBanner(int align, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0.5f;
        anchorMinY = 1f;
        anchorMaxX = 0.5f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 0.5f;
        anchoredPositionX = 0f;
        anchoredPositionY = -100f;
        if ((align & (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter) == (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter)
        {
            anchorMinX = 0.5f;
            anchorMaxX = 0.5f;
            pivotX = 0.5f;
            anchoredPositionX = 0f;

        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerRight) == (int)Yodo1U3dBannerAdPosition.BannerRight)
        {
            anchorMinX = 1f;
            anchorMaxX = 1f;
            pivotX = 0.5f;
            anchoredPositionX = -320f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerLeft) == (int)Yodo1U3dBannerAdPosition.BannerLeft)
        {
            anchorMinX = 0f;
            anchorMaxX = 0f;
            pivotX = 0.5f;
            anchoredPositionX = 320f;
        }

        if ((align & (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter) == (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0.5f;
            anchoredPositionY = 0f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerBottom) == (int)Yodo1U3dBannerAdPosition.BannerBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 0.5f;
            anchoredPositionY = 100f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerTop) == (int)Yodo1U3dBannerAdPosition.BannerTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 0.5f;
            anchoredPositionY = -100f;
        }
    }
    private static void CalculateAnchoringForIABBanner(int align, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0.5f;
        anchorMinY = 1f;
        anchorMaxX = 0.5f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 0.5f;
        anchoredPositionX = 0f;
        anchoredPositionY = -250f;
        if ((align & (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter) == (int)Yodo1U3dBannerAdPosition.BannerHorizontalCenter)
        {
            anchorMinX = 0.5f;
            anchorMaxX = 0.5f;
            pivotX = 0.5f;
            anchoredPositionX = 0f;

        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerRight) == (int)Yodo1U3dBannerAdPosition.BannerRight)
        {
            anchorMinX = 1f;
            anchorMaxX = 1f;
            pivotX = 0.5f;
            anchoredPositionX = -320f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerLeft) == (int)Yodo1U3dBannerAdPosition.BannerLeft)
        {
            anchorMinX = 0f;
            anchorMaxX = 0f;
            pivotX = 0.5f;
            anchoredPositionX = 320f;
        }

        if ((align & (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter) == (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0.5f;
            anchoredPositionY = 0f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerBottom) == (int)Yodo1U3dBannerAdPosition.BannerBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 0.5f;
            anchoredPositionY = 250f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerTop) == (int)Yodo1U3dBannerAdPosition.BannerTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 0.5f;
            anchoredPositionY = -250f;
        }
    }
    private static void CalculateAnchoringForAdaptiveBanner(int align, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0f;
        anchorMinY = 1f;
        anchorMaxX = 1f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 0.5f;
        anchoredPositionX = 0f;
        anchoredPositionY = -60f;

        if ((align & (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter) == (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0.5f;
            anchoredPositionY = 0f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerBottom) == (int)Yodo1U3dBannerAdPosition.BannerBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 0.5f;
            anchoredPositionY = 60f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerTop) == (int)Yodo1U3dBannerAdPosition.BannerTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 0.5f;
            anchoredPositionY = -60f;
        }
    }
    private static void CalculateAnchoringForSmartBanner(int align, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0f;
        anchorMinY = 1f;
        anchorMaxX = 1f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 0.5f;
        anchoredPositionX = 0f;
        anchoredPositionY = -40f;

        if ((align & (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter) == (int)Yodo1U3dBannerAdPosition.BannerVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0.5f;
            anchoredPositionY = 0f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerBottom) == (int)Yodo1U3dBannerAdPosition.BannerBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 0.5f;
            anchoredPositionY = 40f;
        }
        else if ((align & (int)Yodo1U3dBannerAdPosition.BannerTop) == (int)Yodo1U3dBannerAdPosition.BannerTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 0.5f;
            anchoredPositionY = -40f;
        }
    }
    public static void ShowBannerAdsInEditor(string IndexId, int align, int size, int offsetX, int offsetY)
    {
        if (AdHolder == null)
        {
            AdHolder = Instantiate(Resources.Load("SampleAds/AdHolder") as GameObject);
            AdHolder.name = "Yodo1AdCanvas";
            AdHolderCanvas = AdHolder.transform.GetChild(0).GetComponent<Canvas>();
            AdHolderCanvas.sortingOrder = HighestOrder;

        }
        if (BannerSampleAdEditor == null)
        {
            BannerSampleAdEditor = new Dictionary<string, GameObject>();
            AdHolder.SetActive(false);
        }
        GameObject BannerAd;
        if (!BannerSampleAdEditor.TryGetValue(IndexId, out BannerAd))
        {
            if (size == 0)
            {
                if (AdHolderCanvas != null)
                {
                    BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/StandardBannerSampleAdPanel") as GameObject, AdHolderCanvas.transform);
                    CalculateAnchoringForStandardBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                }
            }
            else if (size == 1)
            {
                if (AdHolderCanvas != null)
                {
                    BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/LargeBanner") as GameObject, AdHolderCanvas.transform);
                    CalculateAnchoringForLargeBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                }
            }
            else if (size == 2)
            {
                if (AdHolderCanvas != null)
                {
                    BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/IABMediumRectangleBanner") as GameObject, AdHolderCanvas.transform);
                    CalculateAnchoringForIABBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                }
            }
            else if (size == 3)
            {

                string[] res = UnityStats.screenRes.Split('x');
                if (int.Parse(res[1]) > int.Parse(res[0]))
                {
                    if (AdHolderCanvas != null)
                    {
                        BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/SmartBannerPortrait") as GameObject, AdHolderCanvas.transform);
                        CalculateAnchoringForAdaptiveBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                    }
                }
                else
                {
                    if (AdHolderCanvas != null)
                    {
                        BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/SmartBannerLandscape") as GameObject, AdHolderCanvas.transform);
                        CalculateAnchoringForSmartBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                    }
                }
            }
            else if (size == 4)
            {
                if (AdHolderCanvas != null)
                {
                    BannerSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/AdaptiveBanner") as GameObject, AdHolderCanvas.transform);
                    CalculateAnchoringForAdaptiveBanner(align, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);
                }
            }
            BannerSampleAdEditorTemp.transform.SetSiblingIndex(BannerSampleAdEditorTemp.transform.parent.childCount - 5);
            BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchorMin = new Vector2(anchorMinX, anchorMinY);
            BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchorMax = new Vector2(anchorMaxX, anchorMaxY);
            BannerSampleAdEditorTemp.GetComponent<RectTransform>().pivot = new Vector2(pivotX, pivotY);
            BannerSampleAdEditorTemp.GetComponent<RectTransform>().anchoredPosition = new Vector2(anchoredPositionX, anchoredPositionY);
            SetBannerButtonIndexId(BannerSampleAdEditorTemp, IndexId);
            BannerSampleAdEditorTemp.SetActive(true);
            BannerSampleAdEditor.Add(IndexId, BannerSampleAdEditorTemp);
        }
        else
        {
            BannerAd.SetActive(true);
        }
        if (AdHolder.activeSelf)
        {
            Yodo1U3dLog.LogInfo("BannerAd: opened (editor)");
        }
    }
    private static void CalculateAnchoringForNativeAds(int align, float width, float height, out float anchorMinX, out float anchorMinY, out float anchorMaxX, out float anchorMaxY, out float pivotX, out float pivotY, out float anchoredPositionX, out float anchoredPositionY)
    {
        if (align == 0)
        {
            align = tempAlign;
        }
        tempAlign = align;
        anchorMinX = 0.5f;
        anchorMinY = 1f;
        anchorMaxX = 0.5f;
        anchorMaxY = 1f;
        pivotX = 0.5f;
        pivotY = 1f;
        anchoredPositionX = 0f;
        anchoredPositionY = 0f;
        if ((align & (int)Yodo1U3dNativeAdPosition.NativeHorizontalCenter) == (int)Yodo1U3dNativeAdPosition.NativeHorizontalCenter)
        {
            anchorMinX = 0.5f;
            anchorMaxX = 0.5f;
            pivotX = 0.5f;
            anchoredPositionX = 0f;

        }
        else if ((align & (int)Yodo1U3dNativeAdPosition.NativeRight) == (int)Yodo1U3dNativeAdPosition.NativeRight)
        {
            anchorMinX = 1f;
            anchorMaxX = 1f;
            pivotX = 0.5f;
            anchoredPositionX = -width / 2;
        }
        else if ((align & (int)Yodo1U3dNativeAdPosition.NativeLeft) == (int)Yodo1U3dNativeAdPosition.NativeLeft)
        {
            anchorMinX = 0f;
            anchorMaxX = 0f;
            pivotX = 0.5f;
            anchoredPositionX = width / 2;
        }

        if ((align & (int)Yodo1U3dNativeAdPosition.NativeVerticalCenter) == (int)Yodo1U3dNativeAdPosition.NativeVerticalCenter)
        {
            anchorMinY = 0.5f;
            anchorMaxY = 0.5f;
            pivotY = 0f;
            anchoredPositionY = -height / 2;
        }
        else if ((align & (int)Yodo1U3dNativeAdPosition.NativeBottom) == (int)Yodo1U3dNativeAdPosition.NativeBottom)
        {
            anchorMinY = 0f;
            anchorMaxY = 0f;
            pivotY = 1f;
            anchoredPositionY = height;
        }
        else if ((align & (int)Yodo1U3dNativeAdPosition.NativeTop) == (int)Yodo1U3dNativeAdPosition.NativeTop)
        {
            anchorMinY = 1f;
            anchorMaxY = 1f;
            pivotY = 1f;
            anchoredPositionY = 0f;
        }
    }
    public static void ShowNativeAdsInEditor(string IndexId, int width, int height, int offsetX, int offsetY, Color colorVal)
    {
        if (AdHolder == null)
        {
            AdHolder = Instantiate(Resources.Load("SampleAds/AdHolder") as GameObject);
            AdHolder.name = "Yodo1AdCanvas";
            AdHolderCanvas = AdHolder.transform.GetChild(0).GetComponent<Canvas>();
            AdHolderCanvas.sortingOrder = HighestOrder;

        }
        if (NativeSampleAdEditor == null)
        {
            NativeSampleAdEditor = new Dictionary<string, GameObject>();
            AdHolder.SetActive(false);
        }
        GameObject NativeAd;
        if (!NativeSampleAdEditor.TryGetValue(IndexId, out NativeAd))
        {
            string[] res = UnityStats.screenRes.Split('x');
            if (width > int.Parse(res[0]))
            {
                width = int.Parse(res[0]);
            }
            if (height > int.Parse(res[1]))
            {
                height = int.Parse(res[1]);
            }
            int xVal = (width / 2) + offsetX;
            int yVal = -(height / 2) - offsetY;
            if ((width / height) > 3.5)
            {
                if (AdHolderCanvas != null)
                {
                    NativeSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/TemplateNativeAdSmall") as GameObject, AdHolderCanvas.transform);
                    if (height > 60 && width > 360)
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().localScale = new Vector2((float)width / 360, (float)height / 60);

                    }
                    else
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);

                    }
                }
            }
            else
            {
                if (AdHolderCanvas != null)
                {
                    NativeSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/TemplateNativeAdMedium") as GameObject, AdHolderCanvas.transform);
                    if (height > 300 && width > 360)
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().localScale = new Vector2((float)width / 360, (float)height / 300);

                    }
                    else
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);
                    }
                    if (height < 200)
                    {
                        NativeSampleAdEditorTemp.transform.GetChild(0).gameObject.SetActive(false);
                        NativeSampleAdEditorTemp.transform.GetChild(2).gameObject.SetActive(false);
                        NativeSampleAdEditorTemp.transform.GetChild(4).gameObject.SetActive(false);
                    }
                }
            }

            //NativeSampleAdEditorTemp.transform.SetAsFirstSibling();
            NativeSampleAdEditorTemp.transform.SetSiblingIndex(NativeSampleAdEditorTemp.transform.parent.childCount - 5);

            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchorMin = new Vector2(0, 1);
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchorMax = new Vector2(0, 1);
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().pivot = new Vector2(0.5f, 0.5f);

            NativeSampleAdEditorTemp.GetComponent<Image>().color = colorVal;


            if (!((width / height) > 3.5))
            {
                if (xVal < 85)
                {
                    xVal = 85;
                }
                if (yVal > -70)
                {
                    yVal = -70;
                }
            }
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchoredPosition = new Vector2(xVal, yVal);
            SetNativeButtonIndexId(NativeSampleAdEditorTemp, IndexId);
            NativeSampleAdEditorTemp.SetActive(true);
            NativeSampleAdEditor.Add(IndexId, NativeSampleAdEditorTemp);
        }
        else
        {
            NativeAd.SetActive(true);
        }
        if (AdHolder.activeSelf)
        {
            Yodo1U3dLog.LogInfo("NativeAd: opened (editor)");
        }
    }
    public static void ShowNativeAdsInEditor(string IndexId, int align, int width, int height, int offsetX, int offsetY, Color colorVal)
    {
        if (AdHolder == null)
        {
            AdHolder = Instantiate(Resources.Load("SampleAds/AdHolder") as GameObject);
            AdHolder.name = "Yodo1AdCanvas";
            AdHolderCanvas = AdHolder.transform.GetChild(0).GetComponent<Canvas>();
            AdHolderCanvas.sortingOrder = HighestOrder;

        }
        if (NativeSampleAdEditor == null)
        {
            NativeSampleAdEditor = new Dictionary<string, GameObject>();
            AdHolder.SetActive(false);
        }
        GameObject NativeAd;
        if (!NativeSampleAdEditor.TryGetValue(IndexId, out NativeAd))
        {
            if ((width / height) > 3.5)
            {
                if (AdHolderCanvas != null)
                {
                    NativeSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/TemplateNativeAdSmall") as GameObject, AdHolderCanvas.transform);
                    if (height > 60 && width > 360)
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().localScale = new Vector2((float)width / 360, (float)height / 60);
                        CalculateAnchoringForNativeAds(align, width, height, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);

                    }
                    else
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);
                        CalculateAnchoringForNativeAds(align, width, height, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);

                    }
                }
            }
            else
            {
                if (AdHolderCanvas != null)
                {
                    NativeSampleAdEditorTemp = Instantiate(Resources.Load("SampleAds/TemplateNativeAdMedium") as GameObject, AdHolderCanvas.transform);

                    if (height > 300 && width > 360)
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().localScale = new Vector2((float)width / 360, (float)height / 300);
                        CalculateAnchoringForNativeAds(align, width, height, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);

                    }
                    else
                    {
                        NativeSampleAdEditorTemp.GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);
                        CalculateAnchoringForNativeAds(align, width, height, out anchorMinX, out anchorMinY, out anchorMaxX, out anchorMaxY, out pivotX, out pivotY, out anchoredPositionX, out anchoredPositionY);

                    }
                    if (height < 200)
                    {
                        NativeSampleAdEditorTemp.transform.GetChild(0).gameObject.SetActive(false);
                        NativeSampleAdEditorTemp.transform.GetChild(2).gameObject.SetActive(false);
                        NativeSampleAdEditorTemp.transform.GetChild(4).gameObject.SetActive(false);
                    }
                }
            }

            NativeSampleAdEditorTemp.transform.SetSiblingIndex(NativeSampleAdEditorTemp.transform.parent.childCount - 5);
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchorMin = new Vector2(anchorMinX, anchorMinY);
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchorMax = new Vector2(anchorMaxX, anchorMaxY);
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().pivot = new Vector2(pivotX, pivotY);
            NativeSampleAdEditorTemp.GetComponent<Image>().color = colorVal;
            NativeSampleAdEditorTemp.GetComponent<RectTransform>().anchoredPosition = new Vector2(anchoredPositionX + offsetX, anchoredPositionY - offsetY);
            SetNativeButtonIndexId(NativeSampleAdEditorTemp, IndexId);
            NativeSampleAdEditorTemp.SetActive(true);
            NativeSampleAdEditor.Add(IndexId, NativeSampleAdEditorTemp);
        }
        else
        {
            NativeAd.SetActive(true);
        }
        if (AdHolder.activeSelf)
        {
            Yodo1U3dLog.LogInfo("NativeAd: opened (editor)");
        }
    }

    public static void LoadInterstitialAdsInEditor()
    {
        if (InterstitialSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onInterstitialAdLoadedEvent");
        }
    }

    public static void ClickInterstitialInEditor()
    {
        if (InterstitialSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onInterstitialAdClickedEvent");
        }
        OpenEditorAdClickURL();
    }

    public static bool ShowInterstitialAdsInEditor()
    {
        if (InterstitialSampleAdEditor == null)
        {
            return false;
        }

        DisableGUI = true;
        InterstitialSampleAdEditor.SetActive(true);
        Yodo1U3dMasCallback.ForwardEvent("onInterstitialAdOpenedEvent");
        return true;
    }

    public static void LoadRewardedVideodsInEditor()
    {
        if (RewardedVideoSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onRewardedAdLoadedEvent");
        }
    }

    public static void ClickRewardedVideoInEditor()
    {
        if (RewardedVideoSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onRewardedAdClickedEvent");
        }
        OpenEditorAdClickURL();
    }

    public static bool ShowRewardedVideodsInEditor()
    {
        if (RewardedVideoSampleAdEditor == null)
        {
            return false;
        }

        DisableGUI = true;
        RewardedVideoSampleAdEditor.SetActive(true);
        Yodo1U3dMasCallback.ForwardEvent("onRewardedAdOpenedEvent");
        return true;
    }
    public static void LoadRewardedInterstitialInEditor()
    {
        if (RewardedInterstitialSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onRewardedInterstitialAdLoadedEvent");
        }
    }

    public static void ClickRewardedInterstitialInEditor()
    {
        if (RewardedInterstitialSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onRewardedInterstitialAdClickedEvent");
        }
        OpenEditorAdClickURL();
    }

    public static void ShowRewardedInterstitialInEditor()
    {
        if (RewardedInterstitialSampleAdEditor != null)
        {
            DisableGUI = true;
            RewardedInterstitialSampleAdEditor.SetActive(true);
            Yodo1U3dMasCallback.ForwardEvent("onRewardedInterstitialAdOpenedEvent");
        }
    }

    public static void LoadAppOpenInEditor()
    {
        if (AppOpenAdsSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onAppOpenAdLoadedEvent");
        }
    }

    public static void ClickAppOpenInEditor()
    {
        if (AppOpenAdsSampleAdEditor != null)
        {
            Yodo1U3dMasCallback.ForwardEvent("onAppOpenAdClickedEvent");
        }
        OpenEditorAdClickURL();
    }

    public static bool ShowAppOpenInEditor()
    {
        if (AppOpenAdsSampleAdEditor == null)
        {
            return false;
        }

        DisableGUI = true;
        AppOpenAdsSampleAdEditor.SetActive(true);
        Yodo1U3dMasCallback.ForwardEvent("onAppOpenAdOpenedEvent");
        return true;
    }
    public static void HideBannerAdsInEditor(string IndexId)
    {
        if (BannerSampleAdEditor != null)
        {
            GameObject BannerAd;
            if (BannerSampleAdEditor.TryGetValue(IndexId, out BannerAd))
            {

                Yodo1U3dLog.LogInfo("BannerAd: closed (editor)");
                if (BannerSampleAdEditor[IndexId] != null)
                {
                    BannerSampleAdEditor[IndexId].SetActive(false);
                }

            }

        }
    }
    public static void DestroyBannerAdsInEditor(string IndexId)
    {
        if (BannerSampleAdEditor != null)
        {
            GameObject BannerAd;
            if (BannerSampleAdEditor.TryGetValue(IndexId, out BannerAd))
            {
                Yodo1U3dLog.LogInfo("BannerAd: destroyed (editor)");
                Destroy(BannerSampleAdEditor[IndexId]);
                BannerSampleAdEditor.Remove(IndexId);

            }


        }
    }
    public static void CloseInterstitialAdsInEditor()
    {
        if (InterstitialSampleAdEditor != null)
        {
            DisableGUI = false;
            InterstitialSampleAdEditor.SetActive(false);
            Yodo1U3dMasCallback.ForwardEvent("onInterstitialAdClosedEvent");
        }
    }
    public static void CloseRewardedVideodsInEditor()
    {
        if (RewardedVideoSampleAdEditor != null)
        {
            DisableGUI = false;
            RewardedVideoSampleAdEditor.SetActive(false);
            if (GrantReward)
            {
                Yodo1U3dMasCallback.ForwardEvent("onRewardedAdReceivedRewardEvent");
                GrantReward = false;
            }
            Yodo1U3dMasCallback.ForwardEvent("onRewardedAdClosedEvent");
        }
    }

    public static void CloseRewardedInterstitialInEditor()
    {
        if (RewardedInterstitialSampleAdEditor != null)
        {
            DisableGUI = false;
            RewardedInterstitialSampleAdEditor.SetActive(false);
            if (GrantReward)
            {
                Yodo1U3dMasCallback.ForwardEvent("onRewardedInterstitialAdEarnedEvent");
                GrantReward = false;
            }
            Yodo1U3dMasCallback.ForwardEvent("onRewardedInterstitialAdClosedEvent");
        }
    }
    public static void CloseAppOpenAdsInEditor()
    {
        if (AppOpenAdsSampleAdEditor != null)
        {
            DisableGUI = false;
            AppOpenAdsSampleAdEditor.SetActive(false);

            Yodo1U3dMasCallback.ForwardEvent("onAppOpenAdClosedEvent");
        }
    }
    public static void GetRewardsInEditor()
    {
        GrantReward = true;
    }

    public static void ClickNativeInEditor(string IndexId)
    {
        if (string.IsNullOrEmpty(IndexId))
        {
            return;
        }
        Yodo1U3dNativeAdView.DispatchAdEvent(Yodo1U3dAdEvent.AdClicked, null, IndexId, null);
        OpenEditorAdClickURL();
    }

    public static void ClickBannerInEditor(string IndexId)
    {
        if (string.IsNullOrEmpty(IndexId))
        {
            return;
        }
        Yodo1U3dBannerAdView.DispatchAdEvent(Yodo1U3dAdEvent.AdClicked, null, IndexId, null);
        OpenEditorAdClickURL();
    }

    /// <summary>
    /// Propagates the banner mock's IndexId onto its click button so the
    /// editor click action can dispatch the event for the right instance.
    /// </summary>
    private static void SetBannerButtonIndexId(GameObject bannerAd, string IndexId)
    {
        if (bannerAd == null)
        {
            return;
        }
        BannerAdButtonEditorAction[] actions = bannerAd.GetComponentsInChildren<BannerAdButtonEditorAction>(true);
        for (int i = 0; i < actions.Length; i++)
        {
            actions[i].indexId = IndexId;
        }
    }

    /// <summary>
    /// Opens the editor test-ad click-through landing page. No-op on
    /// non-editor platforms (this class is editor-only).
    /// </summary>
    private static void OpenEditorAdClickURL()
    {
        Application.OpenURL(EditorAdClickURL);
    }

    /// <summary>
    /// Propagates the native mock's IndexId onto its click button so the
    /// editor click action can dispatch the event for the right instance.
    /// </summary>
    private static void SetNativeButtonIndexId(GameObject nativeAd, string IndexId)
    {
        if (nativeAd == null)
        {
            return;
        }
        NativeAdButtonEditorAction[] actions = nativeAd.GetComponentsInChildren<NativeAdButtonEditorAction>(true);
        for (int i = 0; i < actions.Length; i++)
        {
            actions[i].indexId = IndexId;
        }
    }

    public static void HideNativeAdsInEditor(string IndexId)
    {
        if (NativeSampleAdEditor != null)
        {
            GameObject NativeAd;
            if (NativeSampleAdEditor.TryGetValue(IndexId, out NativeAd))
            {

                Yodo1U3dLog.LogInfo("NativeAd: hidden (editor)");
                if (NativeSampleAdEditor[IndexId] != null)
                {
                    NativeSampleAdEditor[IndexId].SetActive(false);
                }

            }

        }
    }
    public static void DestroyNativeAdsInEditor(string IndexId)
    {
        if (NativeSampleAdEditor != null)
        {
            GameObject NativeAd;
            if (NativeSampleAdEditor.TryGetValue(IndexId, out NativeAd))
            {
                Yodo1U3dLog.LogInfo("NativeAd: destroyed (editor)");
                Destroy(NativeSampleAdEditor[IndexId]);
                NativeSampleAdEditor.Remove(IndexId);

            }


        }
    }
}
#endif