using System;
using UnityEngine;
using YG;

namespace TyphoonUnitySDK
{
    public class YandexGamesSdk : BaseSdk
    {
        public override void OnCreate()
        {
            SdkDebug.Log("YandexGamesSdk OnCreate...");
            YG2.onOpenAnyAdv += HandleOnOpenAnyAdv;
            YG2.onCloseAnyAdv += HandleOnCloseAnyAdv;
            YG2.onPauseGame += HandleOnPauseGame;
            if (SdkLite.YandexGamesLifecycle == null)
            {
                SdkLite.OverrideYandexGamesLifecycle(new YandexGamesLifecycle());
            }

            SdkDebug.Log("YandexGamesSdk OnCreate done!");
        }

        private void HandleOnPauseGame(bool isPaused)
        {
            SdkDebug.Log($"HandleOnPauseGame {isPaused}");
            SdkLite.YandexGamesLifecycle.OnPauseGame(isPaused);
        }

        private void HandleOnOpenAnyAdv()
        {
            SdkDebug.Log($"HandleOnOpenAnyAdv");
            SdkLite.YandexGamesLifecycle.OnOpenAnyAdv();
        }

        private void HandleOnCloseAnyAdv()
        {
            SdkDebug.Log($"HandleOnCloseAnyAdv");
            SdkLite.YandexGamesLifecycle.OnCloseAnyAdv();
        }

        public override void InitSdk(Action success, Action<string> fail)
        {
            SdkDebug.Log("InitSdk... invoke success");
            success?.Invoke();
        }

        public override void Login(Action success, Action<string> fail)
        {
            SdkDebug.Log("Login... invoke success");
            success?.Invoke();
        }

        public override void ShowBanner(string scene, BannerPosition position)
        {
            SdkDebug.Log($"ShowBanner... scene:{scene} , position:{position}");
            YG2.StickyAdActivity(true);
        }

        public override void HideBanner(string scene = "")
        {
            SdkDebug.Log($"HideBanner... scene:{scene}");
            YG2.StickyAdActivity(false);
        }


        public override void ShowInters(string scene)
        {
            SdkDebug.Log("ShowInters...");
            YG2.InterstitialAdvShow();
        }

        public override bool GetVideoFlag()
        {
            SdkDebug.Log("GetVideoFlag...");
            return true;
        }

        public override void ShowVideo(string scene, Action success, Action<string> fail)
        {
            SdkDebug.Log($"ShowVideo... scene:{scene}");
            YG2.RewardedAdvShow(scene, () => { success?.Invoke(); });
        }

        public override SystemLanguage GetSystemLanguage()
        {
            SdkDebug.Log($"GetSystemLanguage... return YG2.lang:{YG2.lang}");
            switch (YG2.lang)
            {
                case "ru": return SystemLanguage.Russian;
                case "en": return SystemLanguage.English;
                case "tr": return SystemLanguage.Turkish;
                case "uk": return SystemLanguage.Ukrainian;
                case "be": return SystemLanguage.Belarusian;
                case "he": return SystemLanguage.Hebrew;
                case "ar": return SystemLanguage.Arabic;
                case "fr": return SystemLanguage.French;
                case "de": return SystemLanguage.German;
                case "es": return SystemLanguage.Spanish;
                case "it": return SystemLanguage.Italian;
                case "pt": return SystemLanguage.Portuguese;
                case "pl": return SystemLanguage.Polish;
                case "cs": return SystemLanguage.Czech;
                case "sk": return SystemLanguage.Slovak;
                case "hu": return SystemLanguage.Hungarian;
                case "ro": return SystemLanguage.Romanian;
                case "bg": return SystemLanguage.Bulgarian;
                case "nl": return SystemLanguage.Dutch;
                case "sv": return SystemLanguage.Swedish;
                case "fi": return SystemLanguage.Finnish;
                case "da": return SystemLanguage.Danish;
                case "no": return SystemLanguage.Norwegian;
                case "ja": return SystemLanguage.Japanese;
                case "ko": return SystemLanguage.Korean;
                case "zh": return SystemLanguage.ChineseSimplified;
                default:
                    return SystemLanguage.English;
            }
        }
    }
}