using System;
#if UNITY_WEBGL && !UNITY_EDITOR
using System.Runtime.InteropServices;
#endif
using UnityEngine;
using AOT;
using System.Collections.Generic;

namespace Arkadium
{
	[Flags]
	public enum AnalyticsProvider
	{
		CONSOLE = 1,
		GOOGLE = 2,
		APP_INSIGHTS = 3
	}

	public interface IArkadiumAnalytics
	{
		void ConfigureProvider(AnalyticsProvider provider, string appId);
		void SendEvent(string eventCategory, string eventAction, Dictionary<string, string> dimensions);
		void SendPageView(string pageName, Dictionary<string, string> dimensions);
		void SetDimensions(Dictionary<string, string> dimensions);
	}

	public class ArkadiumAnalytics : IArkadiumAnalytics
	{
#if UNITY_WEBGL && !UNITY_EDITOR
		[DllImport("__Internal")]
		private static extern void _ConfigureProvider(int provider, string appId);
		[DllImport("__Internal")]
        private static extern void _SendEvent(string eventCategory, string eventAction, string dimensions);
		[DllImport("__Internal")]
        private static extern void _SendPageView(string pageName, string dimensions);
		[DllImport("__Internal")]
        private static extern void _SetDimensions(string dimensions);
#else
		private void _ConfigureProvider(int provider, string appId) { }
		private void _SendEvent(string eventCategory, string eventAction, string dimensions) { }
		private void _SendPageView(string pageName, string dimensions) { }
		private void _SetDimensions(string dimensions) { }
#endif

		public void ConfigureProvider(AnalyticsProvider provider, string appId)
		{
			_ConfigureProvider((int)provider, appId);
		}

		public void SendEvent(string eventCategory, string eventAction, Dictionary<string, string> dimensions_)
		{
			var dimensions = BasicJSON.FromDictionaryOfStrings(dimensions_);
			_SendEvent(eventCategory, eventAction, dimensions);
		}
		public void SendPageView(string pageName, Dictionary<string, string> dimensions_)
		{
			var dimensions = BasicJSON.FromDictionaryOfStrings(dimensions_);
			_SendPageView(pageName, dimensions);
		}
		public void SetDimensions(Dictionary<string, string> dimensions_)
		{
			var dimensions = BasicJSON.FromDictionaryOfStrings(dimensions_);
			_SetDimensions(dimensions);
		}
	}
}
