﻿#if UNITY_ANDROID
namespace Stove.StoveSDK
{
    using UnityEngine;

    internal class AuthInterface
    {
        static AndroidJavaObject wrapper = new AndroidJavaObject("com.stove.unity.AuthWrapper");

        internal static void Initialize(string identifier)
        {
            wrapper.CallStatic("initialize", identifier);
        }

        internal static void Initialize(string version, string identifier)
        {
            wrapper.CallStatic("initialize", version, identifier);
        }

        internal static void Login(string providerClassName, string identifier)
        {
            wrapper.CallStatic("login", providerClassName, identifier);
        }

        internal static void LoginGeneric(string providerClassName, string userDicString, string identifier)
        {
            wrapper.CallStatic("loginGeneric", providerClassName, userDicString, identifier);
        }

        internal static void LoginGeneral(string providerClassName, string jsonString, string identifier)
        {
            wrapper.CallStatic("loginGeneral", providerClassName, jsonString, identifier);
        }

        internal static void Register(string providerClassName, string termsOfServiceDataListString, string identifier)
        {
            wrapper.CallStatic("register", providerClassName, termsOfServiceDataListString, identifier);
        }

        internal static void RegisterGeneric(string providerClassName, string userDicString, string termsOfServiceDataListString, string identifier)
        {
            wrapper.CallStatic("registerGeneric", providerClassName, userDicString, termsOfServiceDataListString, identifier);
        }

        internal static void Logout()
        {
            wrapper.CallStatic("logout");
        }

        internal static string GetAccessToken()
        {
            return wrapper.CallStatic<string>("getAccessToken");
        }

        internal static void SetAccessToken(string accessTokenString)
        {
            wrapper.CallStatic("setAccessToken", accessTokenString);
        }

        internal static void Fetch(string identifier)
        {
            wrapper.CallStatic("fetch", identifier);
        }

        internal static void FetchForRegister(string identifier)
        {
            wrapper.CallStatic("fetchForRegister", identifier);
        }

        internal static void Save(string termsOfServiceDataListString, string identifier)
        {
            wrapper.CallStatic("save", termsOfServiceDataListString, identifier);
        }

        internal static void Refresh(string identifier)
        {
            wrapper.CallStatic("refresh", identifier);
        }

        internal static void Link(string providerClassName, string identifier)
        {
            wrapper.CallStatic("link", providerClassName, identifier);
        }

        internal static void LinkGeneric(string providerClassName, string userDicString, string identifier)
        {
            wrapper.CallStatic("linkGeneric", providerClassName, userDicString, identifier);
        }
        
        internal static void LinkGeneral(string providerClassName, string jsonString, string identifier)
        {
            wrapper.CallStatic("linkGeneral", providerClassName, jsonString, identifier);
        }

        internal static void FetchOperation(string identifier)
        {
            wrapper.CallStatic("fetchOperation", identifier);
        }

        internal static void SetGameProfile(string gameProfile)
        {
            wrapper.CallStatic("setGameProfile", gameProfile);
        }

        internal static void SetGameProfileProperties(string properties)
        {
            wrapper.CallStatic("setGameProfileProperties", properties);
        }

        internal static string GetVersion()
        {
            return wrapper.CallStatic<string>("getVersion");
        }

        internal static bool IsMain(string providerCode)
        {
            return wrapper.CallStatic<bool>("isMain", providerCode);
        }

        internal static void SetPlaytimeListener(string identifier)
        {
            wrapper.CallStatic("setPlaytimeListener", identifier);
        }
    }
}
#endif
