﻿using System;
using InMobiAds.Common;
using System.Collections.Generic;

namespace InMobiAds.Api
{
	public enum InMobiAdPosition
	{
		TopLeft,
		TopCenter,
		TopRight,
		Centered,
		BottomLeft,
		BottomCenter,
		BottomRight
	}

	public class InMobiPlugin
	{

		/**
		* Populate this key to consentObject with boolean value.
		*/
		public const String IM_GDPR_CONSENT_AVAILABLE = "gdpr_consent_available";

		/**
		* Key to populate consent with respect to IAB norms.
		*/
		public const String IM_GDPR_CONSENT_IAB = "gdpr_consent";

		public event EventHandler<SdkInitializationStatusArgs> OnInitializationCompleted;

		private IInMobiPluginClient inmobiPluginClient;


		public InMobiPlugin ()
		{
			inmobiPluginClient = InMobiAdsClientFactory.BuildInMobiPluginClient ();
		}

		public void Init(string accountId) {
			inmobiPluginClient.OnInitializationCompleted += OnInitializationStatus;
			inmobiPluginClient.Init (accountId);
		}

		public void Init(string accountId, Dictionary<string, object> gdprConsentObject) {
			inmobiPluginClient.OnInitializationCompleted += OnInitializationStatus;
			inmobiPluginClient.Init (accountId, gdprConsentObject);
		}

		public void OnInitializationStatus(object sender, SdkInitializationStatusArgs args) {
			OnInitializationCompleted?.Invoke(sender, args);
        }

		//Set log level
		public void SetLogLevel(string logLevel){
			inmobiPluginClient.SetLogLevel (logLevel);
		}
			
		//Set Age
		public void SetAge(int age){
			inmobiPluginClient.SetAge (age);
		}

		//Set AgeGroup
		public void SetAgeGroup(string ageGroup){
			inmobiPluginClient.SetAgeGroup (ageGroup);
		}

		//Set AreaCode
		public void SetAreaCode(string areaCode){
			inmobiPluginClient.SetAreaCode(areaCode);
		}

		//Set PostalCode
		public void SetPostalCode(string postalCode){
			inmobiPluginClient.SetPostalCode (postalCode);
		}

		//Set Location With City State Country
		public void SetLocationWithCityStateCountry(string city, string state, string country){
			inmobiPluginClient.SetLocationWithCityStateCountry (city, state, country);
		}

		//Set Year of Birth
		public void SetYearOfBirth(int yearOfBirth){
			inmobiPluginClient.SetYearOfBirth (yearOfBirth);
		}

		//Set Gender GENDER_MALE or GENDER_FEMALE
		public void SetGender(string gender){
			inmobiPluginClient.SetGender (gender);
		}

		//set Education EDUCATION_HIGHSCHOOLORLESS, EDUCATION_COLLEGEORGRADUATE, EDUCATION_POSTGRADUATEORABOVE
		public void SetEducation(string education){
			inmobiPluginClient.SetEducation (education);
		}

		//set Language
		public void SetLanguage(string language){
			inmobiPluginClient.SetLanguage (language);
		}

		//set Interests
		public void SetInterests(string interests){
			inmobiPluginClient.SetInterests (interests);
		}

		//set GDPR consent object 
		public void UpdateGdprConsentObject(Dictionary<string, object> gdprConsentObject){
			inmobiPluginClient.UpdateGdprConsentObject(gdprConsentObject);
		}

		//set Publisher Provided Unified IDs
		public void SetPublisherProvidedUnifiedId(Dictionary<string, object> publisherProviderUnifiedIds){
			inmobiPluginClient.SetPublisherProvidedUnifiedId(publisherProviderUnifiedIds);
		}
	}
}

