package com.airlock.iam.techclient.api.domain.model;

import com.airlock.iam.base.api.domain.model.Entity;
import com.airlock.iam.base.api.domain.model.exception.ViolationException;
import com.airlock.iam.base.api.domain.model.identity.Identity;
import com.airlock.iam.common.api.domain.model.locking.LockInfo;
import java.util.Optional;

public interface TechnicalClient extends Entity<TechnicalClient> {
   @Override
   Identity<TechnicalClient> getId();

   String getDisplayName();

   Optional<String> getDescription();

   Optional<String> getLabel();

   default boolean isLocked() {
      return this.getLockInfo().isPresent();
   }

   default boolean isLockedWithReason(String reason) {
      ViolationException.checkNotNull(reason, "lock reason must not be null");
      return reason.equals(this.getLockInfo().map(LockInfo::getLockReason).orElse(null));
   }

   Optional<LockInfo> getLockInfo();
}
