export type ConfigurationScope = "system" | "project" | "plan" | "task" | "run";
export type OverrideStrategy =
  "replace" | "merge-map" | "append-unique" | "deny-lower-override" | "custom";
export type EffectCategory =
  | "presentation-only"
  | "future-runs-only"
  | "replan/readiness-affecting"
  | "restart/reload-required"
  | "security/approval-sensitive"
  | "immutable-after-creation";

export interface ConfigurationDefinition<T> {
  readonly key: string;
  readonly schemaVersion: number;
  readonly title: string;
  readonly description: string;
  readonly defaultValue?: T;
  readonly allowedScopes: readonly ConfigurationScope[];
  readonly overrideStrategy: OverrideStrategy;
  readonly mutable: boolean;
  readonly effectCategory: EffectCategory;
  readonly sensitiveReferenceOnly: boolean;
}

export interface ConfigurationOverride<T> {
  readonly definitionKey: string;
  readonly scopeType: ConfigurationScope;
  readonly scopeId: string;
  readonly value: T;
  readonly resourceRevision: number;
  readonly setBy: string;
  readonly setAt: string;
}

export interface EffectiveConfiguration<T> {
  readonly value: T;
  readonly sourceScope: ConfigurationScope;
  readonly sourceId: string;
  readonly provenanceChain: readonly { scopeType: ConfigurationScope; scopeId: string }[];
  readonly lockedReason?: string;
}
