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

import { ErrorConverter } from '../ErrorConverter';
import { FidoUafAttestationInformationCertificateError } from './FidoUafAttestationInformationCertificateError';
import { FidoUafAttestationInformationError } from './FidoUafAttestationInformationError';
import { FidoUafAttestationInformationFetchCrlError } from './FidoUafAttestationInformationFetchCrlError';
import { FidoUafAttestationInformationUnknownError } from './FidoUafAttestationInformationUnknownError';

enum FidoUafAttestationInformationErrorType {
	CertificateError,
	FetchCrlError,
	Unknown,
}

export class FidoUafAttestationInformationErrorConverter extends ErrorConverter<FidoUafAttestationInformationError> {
	convert(): FidoUafAttestationInformationError {
		const subtype =
			FidoUafAttestationInformationErrorType[
				this.error.type as keyof typeof FidoUafAttestationInformationErrorType
			];
		switch (subtype) {
			case FidoUafAttestationInformationErrorType.CertificateError:
				return new FidoUafAttestationInformationCertificateError(
					this.error.description,
					this.error.cause
				);
			case FidoUafAttestationInformationErrorType.FetchCrlError:
				return new FidoUafAttestationInformationFetchCrlError(
					this.error.description,
					this.error.cause
				);
			case FidoUafAttestationInformationErrorType.Unknown:
				return new FidoUafAttestationInformationUnknownError(
					this.error.description,
					this.error.cause
				);
		}
	}
}
