﻿#if !NETFX_CORE
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using UnityEngine.SceneManagement;
using I2.Loc;
using UnityEngine.UI;
using System;
#pragma warning disable 618


public partial class I2Loc_PlayTest_Features
{
    [UnityTest, Category("Features"), Description("Support for OnMissingTransation: Fallback, Empty, ShowWarning")]
    public IEnumerator I2LocTest_Fallbacks()
    {
        SceneManager.LoadScene("I2LocTest Multiple Localize In GameObject");
        yield return null;

        var fallbackSprite = I2Utils.FindObject("Canvas/Localized Examples/FallbackImage").GetComponent<Image>();
        var missingText = I2Utils.FindObject("Canvas/Localized Examples/MissingText").GetComponent<Text>();

        var source = I2Utils.FindObject("LocalizationSource").GetComponent<LanguageSource>().mSource;

        #region OnMissing == Empty

        source.OnMissingTranslation = LanguageSourceData.MissingTranslationAction.Empty;
        source.LoadAllLanguages();
        source.SaveLanguages(true);


        I2Utils.FindObject("Canvas/Buttons/French").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_FR");
        Assert.IsTrue(missingText.text == "");

        I2Utils.FindObject("Canvas/Buttons/Spanish").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite == null);
        Assert.IsTrue(missingText.text == "");

        I2Utils.FindObject("Canvas/Buttons/English").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_EN");
        Assert.IsTrue(missingText.text == "Example Missing Text");

        #endregion

        #region OnMissing == Show Warning

        source.OnMissingTranslation = LanguageSourceData.MissingTranslationAction.ShowWarning;
        source.LoadAllLanguages();
        source.SaveLanguages(true);


        I2Utils.FindObject("Canvas/Buttons/French").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_FR");
        Assert.IsTrue(missingText.text.StartsWith("<!-Missing Translation"));

        I2Utils.FindObject("Canvas/Buttons/English").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_EN");
        Assert.IsTrue(missingText.text == "Example Missing Text");

        I2Utils.FindObject("Canvas/Buttons/Spanish").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite == null);
        Assert.IsTrue(missingText.text.StartsWith("<!-Missing Translation"));

        #endregion


        #region OnMissing == Fallback

        source.OnMissingTranslation = LanguageSourceData.MissingTranslationAction.Fallback;
        source.LoadAllLanguages();
        source.SaveLanguages(true);


        I2Utils.FindObject("Canvas/Buttons/French").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_FR");
        Assert.IsTrue(missingText.text == "Example Missing Text");


        I2Utils.FindObject("Canvas/Buttons/Spanish").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_EN");
        Assert.IsTrue(missingText.text == "Argentina");

        I2Utils.FindObject("Canvas/Buttons/English").GetComponent<Button>().onClick.Invoke();
        yield return null;
        Assert.IsTrue(fallbackSprite.sprite.name == "L_EN");
        Assert.IsTrue(missingText.text == "Example Missing Text");

        LocalizationManager.CurrentLanguage = "Spanish (Argentina)";
        yield return null;
        Assert.IsTrue(missingText.text == "Argentina");

        LocalizationManager.CurrentLanguage = "Spanish (Mexico)";
        yield return null;
        Assert.IsTrue(missingText.text == "Mexico");

        LocalizationManager.CurrentLanguage = "Spanish (Bolivia)";
        yield return null;
        Assert.IsTrue(missingText.text == "Argentina");


        #endregion


    }
}

#endif