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

import { PinEnrollmentCustomValidationError } from './PinEnrollmentCustomValidationError';
import { PinEnrollmentError } from './PinEnrollmentError';
import { PinEnrollmentInvalidPinFormat } from './PinEnrollmentInvalidPinFormat';
import { ErrorConverter } from '../../ErrorConverter';

enum PinEnrollmentErrorType {
	CustomValidationError,
	InvalidPinFormat,
}

export class PinEnrollmentErrorConverter extends ErrorConverter<PinEnrollmentError> {
	convert(): PinEnrollmentError {
		const subtype =
			PinEnrollmentErrorType[this.error.type as keyof typeof PinEnrollmentErrorType];
		switch (subtype) {
			case PinEnrollmentErrorType.CustomValidationError:
				return new PinEnrollmentCustomValidationError(
					this.error.description,
					this.error.cause
				);
			case PinEnrollmentErrorType.InvalidPinFormat:
				return new PinEnrollmentInvalidPinFormat(this.error.description, this.error.cause);
		}
	}
}
