/// <summary>
    /// Has reached the max views number?
    /// </summary>
    private bool HasReachTotalMaxViews(xPromoCampaignData campaignData)
    {
        for (int i = 0; i < trackingData.campaigns.Length; i++)
        {
            if (string.Compare(trackingData.campaigns[i].campaignId, campaignData.campaignId, StringComparison.InvariantCulture) == 0)
            {
                return(trackingData.campaigns[i].views >= campaignData.maxViews);
            }
        }

        return(false);
    }
    /// <summary>
    /// Returns true if all the required assets for an specific campaign are already downloaded
    /// NOTE: Here we are not checking if we have downloaded the latest version of the asset
    /// </summary>
    private bool AllRequiredAssetsAreDownloaded(xPromoCampaignData campaignItem, bool logWarnings = false)
    {
        // If was using an embedded prefab, everything is downloaded
        if (!string.IsNullOrEmpty(campaignItem.embeddedPrefab))
        {
            return(true);
        }

        if (!string.IsNullOrEmpty(campaignItem.video))
        {
            if (!xPromoDownloadManager.Instance.ExistsInStorage(campaignItem.video))
            {
                if (logWarnings)
                {
                    Log($"Asset {campaignItem.video} was not still downloaded.");
                }
                return(false);
            }
        }

        if (!string.IsNullOrEmpty(campaignItem.gameLogo))
        {
            if (!xPromoDownloadManager.Instance.ExistsInStorage(campaignItem.gameLogo))
            {
                if (logWarnings)
                {
                    Log($"Asset {campaignItem.gameLogo} was not still downloaded.");
                }
                return(false);
            }
        }

        if (!string.IsNullOrEmpty(campaignItem.gameScreenshot))
        {
            if (!xPromoDownloadManager.Instance.ExistsInStorage(campaignItem.gameScreenshot))
            {
                if (logWarnings)
                {
                    Log($"Asset {campaignItem.gameScreenshot} was not still downloaded.");
                }
                return(false);
            }
        }

        return(true);
    }
    /// <summary>
    /// Show the specified campaign
    /// </summary>
    public void ShowCampaign(xPromoCampaignData campaignItem)
    {
        if (activeCampaign != null)
        {
            activeCampaign.Hide();
            DestroyCampaign(activeCampaign);
        }

        if (AllRequiredAssetsAreDownloaded(campaignItem, true))
        {
            this.campaignItem = campaignItem;
            CreateCurrentCampaign(campaignItem);
        }
        else
        {
            // About to stop showing promo, hook here to have the UI can react acordingly.
            OnHide?.Invoke();

            Log($"Warning: Not all assets are yet downloaded for the new campaign: {campaignItem.campaignId}");
            activeCampaign = null;
        }
    }
    /// <summary>
    /// Create the campaign that is stored in campaignItem
    /// </summary>
    private void CreateCurrentCampaign(xPromoCampaignData campaignItem)
    {
        GameObject prefab = null;

        if (string.IsNullOrEmpty(campaignItem.embeddedPrefab))
        {
            prefab = basicLayoutPrefab;
        }
        else
        {
            var idx = GetEmbeddedCampaignElementIdx(campaignItem.embeddedPrefab);
            if (idx != -1)
            {
                prefab = _embeddedCampaignsElements[idx].gameObject;
            }

            if (idx == -1 || prefab == null)
            {
                Log($"Cannot find the prefab {campaignItem.embeddedPrefab} in the embedded list.");
                return;
            }
        }


        // [Analytics]
        // Also here the UI can react to the promo being shown by moving out of the way.
        OnShow?.Invoke();

        // Increment the number of views
        IncrementViewsOnCampaign(campaignItem.campaignId);

        var activeCampaignGO = GameObject.Instantiate(prefab, xPromoRoot.Instance.transform);

        activeCampaign = activeCampaignGO.GetComponent <xPromoCampaign>();

        // Change the images and video only for the basic layout
        if (string.IsNullOrEmpty(campaignItem.embeddedPrefab))
        {
            if (!string.IsNullOrEmpty(campaignItem.gameScreenshot))
            {
                Texture2D tex = new Texture2D(ImageWidth, ImageHeight);
                tex.LoadImage(xPromoDownloadManager.Instance.GetData(campaignItem.gameScreenshot));
                activeCampaign.gameScreenshot.texture = tex;
                activeCampaign.gameScreenshot.gameObject.SetActive(true);
            }
            else
            {
                activeCampaign.gameScreenshot.gameObject.SetActive(false);
            }

            if (!string.IsNullOrEmpty(campaignItem.gameLogo))
            {
                Texture2D tex = new Texture2D(ImageWidth, ImageHeight);
                tex.LoadImage(xPromoDownloadManager.Instance.GetData(campaignItem.gameLogo));
                activeCampaign.gameLogo.texture = tex;
                activeCampaign.gameLogo.gameObject.SetActive(true);
            }
            else
            {
                activeCampaign.gameLogo.gameObject.SetActive(false);
            }

            if (!string.IsNullOrEmpty(campaignItem.video))
            {
                videoPlayer.enabled = true;
                videoPlayer.url     = $"file://{Application.persistentDataPath}/{campaignItem.video}";
                videoPlayer.Play();
                activeCampaign.video.gameObject.SetActive(true);
            }
            else
            {
                activeCampaign.video.gameObject.SetActive(false);
                videoPlayer.Stop();
                videoPlayer.enabled = false;
            }

            var isoCode    = "";// [REMOVED_REF] LordUILocalization.Instance.GetCurrentLanguageIsoCode();
            var buttonText = GetLocalizationText(isoCode, campaignItem.buttonText);
            if (buttonText != null)
            {
                activeCampaign.buttonText.text = buttonText;
            }
        }
        else
        {
            // Embedded campaign
            if (!string.IsNullOrEmpty(activeCampaign.videoClipName))
            {
                videoPlayer.enabled = true;
                string videofilename = activeCampaign.videoClipName.Contains(".") ? activeCampaign.videoClipName : $"{activeCampaign.videoClipName}.mp4";
                videoPlayer.url = Path.Combine(Application.streamingAssetsPath, videofilename);
                videoPlayer.Play();
                activeCampaign.video.gameObject.SetActive(true);
            }
            else
            {
                videoPlayer.Stop();
                videoPlayer.enabled = false;
            }
        }

        // Logger
        logger.LogTrackingData(trackingData);

        activeCampaign.Show();
    }