/**
 * Copyright © 2022 Anagog Ltd. All rights reserved.
 */

import { AnagogSDK } from './AnagogSDK';
import { AnagogTools } from './AnagogTools';
import type { AnagogEventType } from './types/AnagogEventType';
import type { JedAIStatus } from './types/JedAIStatus';
import type { JEMAUserInteractionEvent } from './models/JEMAUserInteractionEvent';
import type { ApplicationEvent } from './models/ApplicationEvent';
import type { Campaign } from './models/Campaign';

export class AnagogReactNative {

	// /**
	//  * @deprecated This constant is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.packageVersion` instead.
	//  */
	static packageVersion = AnagogSDK.packageVersion;

	// /**
	//  * @deprecated This constant is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.onboarding` instead.
	//  */
	static onboarding = AnagogSDK.onboarding;

	// /**
	//  * @deprecated This constant is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.pageTracker` instead.
	//  */
	static pageTracker = AnagogSDK.pageTracker;

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.obtainEventStream` instead.
	//  */
	static obtainEventStream(listener: (action: AnagogEventType, payload: any) => void) {
		AnagogSDK.obtainEventStream(listener);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.setUserDefinedString` instead.
	//  */
	static setUserDefinedString(customName: string, value: string): Promise<void> {
		return AnagogSDK.setUserDefinedString(customName, value);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getUserDefinedString` instead.
	//  */
	static getUserDefinedString(customName: string): Promise<string> {
		return AnagogSDK.getUserDefinedString(customName);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.setUserDefinedInteger` instead.
	//  */
	static setUserDefinedInteger(customName: string, value: number): Promise<void> {
		return AnagogSDK.setUserDefinedInteger(customName, value);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getUserDefinedInteger` instead.
	//  */
	static getUserDefinedInteger(customName: string): Promise<number> {
		return AnagogSDK.getUserDefinedInteger(customName);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.setUserDefinedDecimal` instead.
	//  */
	static setUserDefinedDecimal(customName: string, value: number): Promise<void> {
		return AnagogSDK.setUserDefinedDecimal(customName, value);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getUserDefinedDecimal` instead.
	//  */
	static getUserDefinedDecimal(customName: string): Promise<number> {
		return AnagogSDK.getUserDefinedDecimal(customName);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.fireMicromoment` instead.
	//  */
	static fireMicromoment(micromoment: ApplicationEvent): Promise<void> {
		return AnagogSDK.fireMicromoment(micromoment);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.sendUserInteractionEvent` instead.
	//  */
	static sendUserInteractionEvent(event: JEMAUserInteractionEvent): Promise<void> {
		return AnagogSDK.sendUserInteractionEvent(event);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.requestMicrosegmentsSnapshotReport` instead.
	//  */
	static requestMicrosegmentsSnapshotReport(): Promise<void> {
		return AnagogSDK.requestMicrosegmentsSnapshotReport();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.requestEncodedEnrichmentReport` instead.
	//  */
	static requestEncodedEnrichmentReport(): Promise<void> {
		return AnagogSDK.requestEncodedEnrichmentReport();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.exportDataEnrichment` instead.
	//  */
	static exportDataEnrichment(requestedMetrics?: string[]): Promise<any> {
		return AnagogSDK.exportDataEnrichment(requestedMetrics);
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.shareFeedback` instead.
	//  */
	static share(): Promise<void> {
		return AnagogSDK.shareFeedback();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.shareFeedback` instead.
	//  */
	static shareFeedback(): Promise<void> {
		return AnagogSDK.shareFeedback();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getFeedbackPath` instead.
	//  */
	static generateFeedback(): Promise<string> {
		return AnagogSDK.generateFeedback();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.enableSDK` instead.
	//  */
	static enableJedAI(): Promise<void> {
		return AnagogSDK.enableSDK();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.disableSDK` instead.
	//  */
	static disableJedAI(): Promise<void> {
		return AnagogSDK.disableSDK();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.disableAndPurgeSDK` instead.
	//  */
	static disableAndPurgeJedAI(): Promise<void> {
		return AnagogSDK.disableAndPurgeSDK();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getSDKStatus` instead.
	//  */
	static getJedAIStatus(): Promise<JedAIStatus> {
		return AnagogSDK.getSDKStatus()
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogSDK.getSDKVersion` instead.
	//  */
	static getJedAIVersion(): Promise<string> {
		return AnagogSDK.getSDKVersion();
	}


	// ===== DEV METHODS ===== //

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogTools.syncCampaigns` instead.
	//  */
	static syncCampaigns(): Promise<void> {
		return AnagogTools.syncCampaigns();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogTools.simulateCampaign` instead.
	//  */
	static simulateCampaign(campaignIdentifier: string | null): Promise<void> {
		return AnagogTools.simulateCampaign(campaignIdentifier)
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogTools.getCampaigns` instead.
	//  */
	static getCampaigns(): Promise<Campaign[]> {
		return AnagogTools.getCampaigns()
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogTools.forceScheduleReports` instead.
	//  */
	static forceScheduleReports(): Promise<void> {
		return AnagogTools.forceScheduleReports();
	}

	// /**
	//  * @deprecated This method is deprecated and will be removed in the future releases.
	//  * Use `AnagogTools.openDebuggingScreen` instead.
	//  */
	static openDebuggingScreen(): Promise<Object> {
		return AnagogTools.openDebuggingScreen();
	}

}