package com.airlock.iam.common.domain.model.state;

import java.util.Optional;

public record InsertAndUnlockAdditionalKeysResult(boolean acquiredOrOwnAllRequiredLocks, Optional<String> insertedValue) implements RetryableOperation {
   public static InsertAndUnlockAdditionalKeysResult alreadyExists() {
      return new InsertAndUnlockAdditionalKeysResult(true, Optional.empty());
   }

   public static InsertAndUnlockAdditionalKeysResult inserted(String value) {
      return new InsertAndUnlockAdditionalKeysResult(true, Optional.of(value));
   }

   public static InsertAndUnlockAdditionalKeysResult mainKeyLockedBySomeoneElseOrDidNotOwnAllAdditionalLocks() {
      return new InsertAndUnlockAdditionalKeysResult(false, Optional.empty());
   }

   public boolean valueWasInserted() {
      return this.insertedValue.isPresent();
   }

   @Override
   public boolean shouldRetry() {
      return !this.acquiredOrOwnAllRequiredLocks;
   }
}
