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

import {
	type FidoUafAttestationInformationGetter,
	FidoUafAttestationInformationGetterImpl,
} from './FidoUafAttestationInformationGetter';

/**
 * The class providing information about the capabilities of the Android device.
 *
 * For example, it informs of whether the device supports full basic attestation or not.
 *
 * @group Common Objects
 */
export abstract class AndroidDeviceCapabilities {
	/**
	 * Returns a {@link FidoUafAttestationInformationGetter} object.
	 *
	 * The object that can be used to obtain the information regarding the support of
	 * {@link https://docs.nevis.net/configurationguide/mobile-auth-concept-and-integration-guide/use-cases-and-best-practices/uaf-surrogate-full-basic-comparison | Full Basic Attestation}
	 * in this device. If full basic attestation is required by the backend during registration, and
	 * this device does not support it, registration will fail. This information can be used to
	 * preemptively inform the user that the device is not supported.
	 *
	 * > [!IMPORTANT]
	 * > This operation is Android specific.
	 *
	 * An instance of {@link AndroidDeviceCapabilities} can be obtained by invoking the
	 * {@link DeviceCapabilities.androidDeviceCapabilities | MobileAuthenticationClient.deviceCapabilities.androidDeviceCapabilities }
	 * getter after initializing the SDK.
	 */
	abstract fidoUafAttestationInformationGetter: FidoUafAttestationInformationGetter;
}

export class AndroidDeviceCapabilitiesImpl extends AndroidDeviceCapabilities {
	fidoUafAttestationInformationGetter: FidoUafAttestationInformationGetter =
		new FidoUafAttestationInformationGetterImpl();
}
