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

import { TypedData } from './TypedData';
import { BiometricPromptOptions } from '../../operations/userverification/BiometricPromptOptions';
import { DevicePasscodePromptOptions } from '../../operations/userverification/DevicePasscodePromptOptions';
import { FingerprintPromptOptions } from '../../operations/userverification/FingerprintPromptOptions';

class PromptOptionsData {
	title?: string;
	description?: string;
	cancelButtonText?: string;
	fallbackButtonText?: string;

	constructor(
		title?: string,
		description?: string,
		cancelButtonText?: string,
		fallbackButtonText?: string
	) {
		this.title = title;
		this.description = description;
		this.cancelButtonText = cancelButtonText;
		this.fallbackButtonText = fallbackButtonText;
	}
}

export abstract class TypedPromptOptions extends TypedData<PromptOptionsData> {
	abstract data: PromptOptionsData;
}

export class TypedBiometricPromptOptions extends TypedPromptOptions {
	type = 'BiometricPromptOptions';
	data: PromptOptionsData;

	constructor(wrapped?: BiometricPromptOptions) {
		super();
		this.data = new PromptOptionsData(
			wrapped?.title,
			wrapped?.description,
			wrapped?.cancelButtonText,
			wrapped?.fallbackButtonText
		);
	}
}

export class TypedDevicePasscodePromptOptions extends TypedPromptOptions {
	type = 'DevicePasscodePromptOptions';
	data: PromptOptionsData;

	constructor(wrapped?: DevicePasscodePromptOptions) {
		super();
		this.data = new PromptOptionsData(wrapped?.title, wrapped?.description);
	}
}

export class TypedFingerprintPromptOptions extends TypedPromptOptions {
	type = 'FingerprintPromptOptions';
	data: PromptOptionsData;

	constructor(wrapped?: FingerprintPromptOptions) {
		super();
		this.data = new PromptOptionsData(
			undefined,
			wrapped?.description,
			wrapped?.cancelButtonText,
			wrapped?.fallbackButtonText
		);
	}
}
