/**
 * Copyright © 2024 Nevis Security AG. All rights reserved.
 */

import uuid from 'react-native-uuid';

import type { MetaData } from './MetaData';
import NevisMobileAuthenticationSdkReact from '../MobileAuthenticationSdk';
import { MetaDataInMessage } from '../model/messages/in/MetaDataInMessage';
import { OperationIdMessage } from '../model/messages/out/OperationIdMessage';

/**
 * An interface that provides additional information about the
 * Nevis Mobile Authentication SDK.
 */
export abstract class MetaDataProvider {
	/**
	 * Property that returns the metaData object.
	 */
	static async metaData(): Promise<MetaData> {
		const operationId = uuid.v4() as string;
		const message = new OperationIdMessage(operationId);
		return NevisMobileAuthenticationSdkReact.metaData(message).then(
			(result: MetaDataInMessage) => {
				const resultMessage = MetaDataInMessage.fromJson(result);
				return resultMessage.metaData;
			}
		);
	}
}
