package com.airlock.iam.factor.domain.model.airlock2fa;

import com.airlock.iam.base.domain.service.uri.IamUriBuilder;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.annotation.Nonnull;
import java.net.URI;
import java.util.Optional;
import lombok.NonNull;

public record Airlock2FAMobileAuthUri(@NonNull String uri) {
   @SuppressFBWarnings(justification = "generated code")
   public Airlock2FAMobileAuthUri {
      if (uri == null) {
         throw new NullPointerException("uri is marked non-null but is null");
      }
   }

   @Nonnull
   @Override
   public String toString() {
      return this.uri;
   }

   public Airlock2FAMobileAuthUri withScheme(Optional<String> scheme) {
      return scheme.<Airlock2FAMobileAuthUri>map(this::withScheme).orElse(this);
   }

   public Airlock2FAMobileAuthUri withScheme(String scheme) {
      return new Airlock2FAMobileAuthUri(IamUriBuilder.fromUri(this.uri()).scheme(scheme).build().toString());
   }

   public String getUriScheme() {
      return URI.create(this.uri).getScheme();
   }
}
