#if UNITY_IOS || UNITY_TVOS
using AOT;

namespace GameAnalyticsSDK.iOS
{
    public class GameAnalyticsATTClient
    {
        #region Singleton

        private GameAnalyticsATTClient()
        {
        }

        public static GameAnalyticsATTClient Instance { get; } = new GameAnalyticsATTClient();

        #endregion

        private static IGameAnalyticsATTListener _attListener;

        [MonoPInvokeCallback(typeof(GameAnalyticsATTObjCBridge.GameAnalyticsATTListenerNotDetermined))]
        private static void GameAnalyticsATTListenerNotDetermined()
        {
            _attListener?.GameAnalyticsATTListenerNotDetermined();
        }

        [MonoPInvokeCallback(typeof(GameAnalyticsATTObjCBridge.GameAnalyticsATTListenerRestricted))]
        private static void GameAnalyticsATTListenerRestricted()
        {
            _attListener?.GameAnalyticsATTListenerRestricted();
        }

        [MonoPInvokeCallback(typeof(GameAnalyticsATTObjCBridge.GameAnalyticsATTListenerDenied))]
        private static void GameAnalyticsATTListenerDenied()
        {
            _attListener?.GameAnalyticsATTListenerDenied();
        }

        [MonoPInvokeCallback(typeof(GameAnalyticsATTObjCBridge.GameAnalyticsATTListenerAuthorized))]
        private static void GameAnalyticsATTListenerAuthorized()
        {
            _attListener?.GameAnalyticsATTListenerAuthorized();
        }

        public void RequestTrackingAuthorization(IGameAnalyticsATTListener listener)
        {
            _attListener = listener;
            GameAnalyticsATTObjCBridge.GameAnalyticsRequestTrackingAuthorization(GameAnalyticsATTListenerNotDetermined, GameAnalyticsATTListenerRestricted,
                GameAnalyticsATTListenerDenied, GameAnalyticsATTListenerAuthorized);
        }
    }
}
#endif
