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

import NevisMobileAuthentication

extension OutOfBandAuthentication {
	func configure(by outOfBandAuthenticationMessage: OutOfBandAuthenticationMessage, operation outOfBandAuthenticationOperation: OutOfBandAuthenticationOperation) -> OutOfBandAuthentication {
		if let requestHeaders = outOfBandAuthenticationMessage.requestHeaders {
			self.requestHeaders(requestHeaders.namesAndValues)
		}

		if outOfBandAuthenticationMessage.accountSelectorProvided {
			accountSelector(outOfBandAuthenticationOperation.accountSelector)
		}

		if outOfBandAuthenticationMessage.authenticatorSelectorProvided {
			authenticatorSelector(outOfBandAuthenticationOperation.authenticatorSelector)
		}

		if outOfBandAuthenticationMessage.pinUserVerifierProvided {
			pinUserVerifier(outOfBandAuthenticationOperation.pinUserVerifier)
		}

		if outOfBandAuthenticationMessage.passwordUserVerifierProvided {
			passwordUserVerifier(outOfBandAuthenticationOperation.passwordUserVerifier)
		}

		if outOfBandAuthenticationMessage.biometricUserVerifierProvided {
			biometricUserVerifier(outOfBandAuthenticationOperation.biometricUserVerifier)
		}

		if outOfBandAuthenticationMessage.devicePasscodeUserVerifierProvided {
			devicePasscodeUserVerifier(outOfBandAuthenticationOperation.devicePasscodeUserVerifier)
		}

		if outOfBandAuthenticationMessage.onSuccessProvided {
			onSuccess { [unowned outOfBandAuthenticationOperation] in
				outOfBandAuthenticationOperation.onSuccess($0)
			}
		}

		if outOfBandAuthenticationMessage.onErrorProvided {
			onError { [unowned outOfBandAuthenticationOperation] in
				outOfBandAuthenticationOperation.onError($0)
			}
		}

		return self
	}
}
