namespace Oculus.Platform
{
  using UnityEngine;
  using System;
  using System.Collections;
  using System.Runtime.InteropServices;

  public sealed class StandalonePlatform
  {
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void UnityLogDelegate(IntPtr tag, IntPtr msg);

    public Request<Models.PlatformInitialize> InitializeInEditor()
    {
#if UNITY_ANDROID
      if (String.IsNullOrEmpty(PlatformSettings.MobileAppID))
      {
        throw new UnityException("Update your App ID by selecting 'Oculus Platform' -> 'Edit Settings'");
      }
      var appID = PlatformSettings.MobileAppID;
#else
      if (String.IsNullOrEmpty(PlatformSettings.AppID))
      {
        throw new UnityException("Update your App ID by selecting 'Oculus Platform' -> 'Edit Settings'");
      }
      var appID = PlatformSettings.AppID;
#endif
      if (String.IsNullOrEmpty(StandalonePlatformSettings.OculusPlatformTestUserAccessToken))
      {
        throw new UnityException("Update your standalone credentials by selecting 'Oculus Platform' -> 'Edit Settings'");
      }
      var accessToken = StandalonePlatformSettings.OculusPlatformTestUserAccessToken;

      CAPI.ovr_UnityResetTestPlatform();
      CAPI.ovr_UnityInitGlobals(IntPtr.Zero);

      return new Request<Models.PlatformInitialize>(CAPI.ovr_PlatformInitializeWithAccessToken(UInt64.Parse(appID), accessToken));
    }
  }
}
