﻿#if UNITY_IOS
namespace Stove.StoveSDK
{
    using System.Runtime.InteropServices;

    internal class AuthInterface
    {
        [DllImport("__Internal")]
        private static extern void stove_auth_initialize(string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_initialize_version(string version, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_login(string providerClassName, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_loginGeneric(string providerClassName, string userDicString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_loginGeneral(string providerClassName, string jsonString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_register(string termsOfServiceDataListString, string providerClassName, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_registerGeneric(string providerClassName, string userDicString, string termsOfServiceDataListString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_logout();
        [DllImport("__Internal")]
        private static extern string stove_auth_accessToken();
        [DllImport("__Internal")]
        private static extern void stove_auth_setAccessToken(string accessTokenString);
        [DllImport("__Internal")]
        private static extern void stove_auth_fetch(string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_fetchForRegister(string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_save(string termsOfServiceDataListString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_refresh(string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_link(string providerClassName, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_linkGeneric(string providerClassName, string userDicString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_linkGeneral(string providerClassName, string jsonString, string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_fetchOperation(string identifier);
        [DllImport("__Internal")]
        private static extern void stove_auth_setGameProfile(string gameProfile);
        [DllImport("__Internal")]
        private static extern void stove_auth_setGameProfileProperties(string properties);
        
        internal static void Initialize(string identifier)
        {
            stove_auth_initialize(identifier);
        }

        internal static void Initialize(string version, string identifier)
        {
            stove_auth_initialize_version(version, identifier);
        }

        internal static void Login(string providerClassName, string identifier)
        {
            stove_auth_login(providerClassName, identifier);
        }

        internal static void LoginGeneric(string providerClassName, string userDicString, string identifier)
        {
            stove_auth_loginGeneric(providerClassName, userDicString, identifier);
        }

        internal static void LoginGeneral(string providerClassName, string jsonString, string identifier)
        {
            stove_auth_loginGeneral(providerClassName, jsonString, identifier);
        }

        internal static void Register(string termsOfServiceDataListString, string providerClassName, string identifier)
        {
            stove_auth_register(termsOfServiceDataListString, providerClassName, identifier);
        }

        internal static void RegisterGeneric(string providerClassName, string userDicString, string termsOfServiceDataListString, string identifier)
        {
            stove_auth_registerGeneric(providerClassName, userDicString, termsOfServiceDataListString, identifier);
        }

        internal static void Logout()
        {
            stove_auth_logout();
        }

        internal static string GetAccessToken()
        {
            return stove_auth_accessToken();
        }

        internal static void SetAccessToken(string accessTokenString)
        {
            stove_auth_setAccessToken(accessTokenString);
        }

        internal static void Fetch(string identifier)
        {
            stove_auth_fetch(identifier);
        }

        internal static void FetchForRegister(string identifier)
        {
            stove_auth_fetchForRegister(identifier);
        }

        internal static void Save(string termsOfServiceDataListString, string identifier)
        {
            stove_auth_save(termsOfServiceDataListString, identifier);
        }

        internal static void Refresh(string identifier)
        {
            stove_auth_refresh(identifier);
        }

        internal static void Link(string providerClassName, string identifier)
        {
            stove_auth_link(providerClassName, identifier);
        }

        internal static void LinkGeneric(string providerClassName, string userDicString, string identifier)
        {
            stove_auth_linkGeneric(providerClassName, userDicString, identifier);
        }

        internal static void LinkGeneral(string providerClassName, string jsonString, string identifier)
        {
            stove_auth_linkGeneral(providerClassName, jsonString, identifier);
        }

        internal static void FetchOperation(string identifier)
        {
            stove_auth_fetchOperation(identifier);
        }

        internal static void SetGameProfile(string gameProfile)
        {
            stove_auth_setGameProfile(gameProfile);
        }

        internal static void SetGameProfileProperties(string properties)
        {
            stove_auth_setGameProfileProperties(properties);
        }

        [DllImport("__Internal")]
        private static extern string stove_auth_version();
        internal static string GetVersion()
        {
            return stove_auth_version();
        }

        [DllImport("__Internal")]
        private static extern bool stove_auth_is_main(string providerCode);
        internal static bool IsMain(string providerCode)
        {
            return stove_auth_is_main(providerCode);
        }

        [DllImport("__Internal")]
        private static extern void stove_auth_setPlaytimeListener(string identifier);
        internal static void SetPlaytimeListener(string identifier)
        {
            stove_auth_setPlaytimeListener(identifier);
        }
    }
}

#endif
