package cloud.nstart.terravault.ordinis.domain;

import java.util.Set;

/**
 * Видимость данных в линейке Ordinis. Часть Kafka topology (топик per scope) и
 * read-API filtering. Значения соответствуют CHECK constraint в БД и enum в
 * JSON Schema поля dictionary_definitions.scope.
 */
public enum DataScope {

  /** Открытые справочники (геопортал, публичные consumer'ы). */
  PUBLIC,

  /** Внутренние данные клиента (Альтум-internal). Не должны утекать наружу клиента. */
  INTERNAL,

  /** Узкий круг: операторы, audit, compliance. */
  RESTRICTED;

  public String topicSuffix() {
    return name().toLowerCase();
  }

  public boolean visibleTo(DataScope consumerScope) {
    if (consumerScope == this) return true;
    if (consumerScope == RESTRICTED) return true; // restricted видит всё в своём bundle
    return consumerScope == INTERNAL && this == PUBLIC;
  }

  public static Set<DataScope> all() {
    return Set.of(values());
  }
}
