﻿#if UNITY_ANDROID
using System;
using System.Collections.Generic;
using UnityEngine;

using InMobiAds.Api;
using InMobiAds.Common;

namespace InMobiAds.Platforms.Android
{
	internal class InMobiPluginClient : AndroidJavaProxy, IInMobiPluginClient
	{
		private AndroidJavaObject inmobiPlugin;

		public event EventHandler<SdkInitializationStatusArgs> OnInitializationCompleted;

		public InMobiPluginClient () : base(Utils.SdkInitializationListener)
		{
			this.inmobiPlugin = new AndroidJavaObject (Utils.InMobiPluginClassName, this);
		}

		//Initialize InMobi SDK using Publisher Account Id
		public void Init(string accountId){
			this.inmobiPlugin.Call ("init", new object[2]{ accountId, null });
		}

		public void Init(string accountId, Dictionary<string, object> gdprConsentObject){
			this.inmobiPlugin.Call ("init", new object[2]{ accountId, Utils.ConvertDictionaryToJavaMap(gdprConsentObject) });
		}

		//Set log level
		public void SetLogLevel(string logLevel){
			this.inmobiPlugin.Call ("setLogLevel", new object[1]{ logLevel });
		}
			
		//Set Age
		public void SetAge(int age){
			this.inmobiPlugin.Call ("setAge", new object[1]{ age });
		}

		//Set AgeGroup
		public void SetAgeGroup(string ageGroup){
			this.inmobiPlugin.Call ("setAgeGroup", new object[1]{ ageGroup });
		}

		//Set AreaCode
		public void SetAreaCode(string areaCode){
			this.inmobiPlugin.Call ("setAreaCode", new object[1]{ areaCode });
		}

		//Set PostalCode
		public void SetPostalCode(string postalCode){
			this.inmobiPlugin.Call ("setPostalCode", new object[1]{ postalCode });
		}

		//Set Location With City State Country
		public void SetLocationWithCityStateCountry(string city, string state, string country){
			this.inmobiPlugin.Call ("setLocationWithCityStateCountry", new object[3]{ city, state, country });
		}

		//Set Year of Birth
		public void SetYearOfBirth(int yearOfBirth){
			this.inmobiPlugin.Call ("setYearOfBirth", new object[1]{ yearOfBirth });
		}

		//Set Gender GENDER_MALE or GENDER_FEMALE
		public void SetGender(string gender){
			this.inmobiPlugin.Call ("setGender", new object[1]{ gender });
		}

		//set Education EDUCATION_HIGHSCHOOLORLESS, EDUCATION_COLLEGEORGRADUATE, EDUCATION_POSTGRADUATEORABOVE
		public void SetEducation(string education){
			this.inmobiPlugin.Call ("setEducation", new object[1]{ education });
		}
		
		//set Language
		public void SetLanguage(string language){
			this.inmobiPlugin.Call ("setLanguage", new object[1]{ language });
		}
		
		//set Interests
		public void SetInterests(string interests){
			this.inmobiPlugin.Call ("setInterests", new object[1]{ interests });
		}

		//set GDPR consent
		public void UpdateGdprConsentObject(Dictionary<string, object> gdprConsentObject) {
			this.inmobiPlugin.Call ("updateGdpr", new object[1]{ Utils.ConvertDictionaryToJavaMap(gdprConsentObject) });
		}

		public void onInitializationComplete (AndroidJavaObject reason) {
			SdkInitializationStatusArgs args;
			if (reason == null) {
				args = new SdkInitializationStatusArgs () {
					status = InitializationStatus.SUCCESS
				};
			} else {
				args = new SdkInitializationStatusArgs () {
					status = new InitializationStatus(InitializationStatusCodes.ERROR, reason.Call<string>("getMessage"))
				};
			}
			this.OnInitializationCompleted?.Invoke(this, args);
        }

		//set Publisher Provided UnifiedIds
        public void SetPublisherProvidedUnifiedId(Dictionary<string, object> publisherProviderUnifiedIds)
        {
			this.inmobiPlugin.Call("setPublisherProvidedUnifiedId", new object[1] { Utils.ConvertDictionaryToJavaMap(publisherProviderUnifiedIds) });
		}
    }
}
#endif

