/// <summary>
    /// Destroy the current campaign
    /// </summary>
    private void DestroyCampaign(xPromoCampaign campaignToDestroy)
    {
        if (videoPlayer.isPlaying)
        {
            videoPlayer.enabled = false;
            videoPlayer.Stop();
        }

        if (campaignToDestroy != null)
        {
            DestroyImmediate(campaignToDestroy.gameObject);
        }
    }
    /// <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();
    }