// SPDX-FileCopyrightText: 2026 FocusFlow contributors
// SPDX-License-Identifier: AGPL-3.0-only

part of '../../models.dart';

/// Stable validation failure categories for domain model boundaries.
///
/// Callers should branch on these codes instead of parsing exception text. The
/// explanatory messages may change, but these enum values are part of the V1
/// backend contract.
enum DomainValidationCode {
  /// Selects the `blankStableId` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankStableId,

  /// Selects the `blankTitle` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankTitle,

  /// Selects the `blankProjectId` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankProjectId,

  /// Selects the `blankName` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankName,

  /// Selects the `blankColorKey` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankColorKey,

  /// Selects the `blankParentTaskId` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankParentTaskId,

  /// Selects the `selfParent` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  selfParent,

  /// Selects the `nonPositiveDuration` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  nonPositiveDuration,

  /// Selects the `partialScheduledInterval` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  partialScheduledInterval,

  /// Selects the `invalidScheduledInterval` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidScheduledInterval,

  /// Selects the `partialActualInterval` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  partialActualInterval,

  /// Selects the `invalidActualInterval` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidActualInterval,

  /// Selects the `invalidTimeInterval` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidTimeInterval,

  /// Selects the `invalidSchedulingWindow` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidSchedulingWindow,

  /// Selects the `invalidCivilDate` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidCivilDate,

  /// Selects the `invalidClockTime` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidClockTime,

  /// Selects the `blankTimeZoneId` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  blankTimeZoneId,

  /// Selects the `nonexistentLocalTime` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  nonexistentLocalTime,

  /// Selects the `ambiguousLocalTime` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  ambiguousLocalTime,

  /// Selects the `emptyRecurrence` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  emptyRecurrence,

  /// Selects the `invalidLockedBlock` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidLockedBlock,

  /// Selects the `invalidLockedOverride` option from this enum.
  /// Code should use this named value when it needs this exact scheduler state, presentation token, or persistence meaning.
  invalidLockedOverride,
}
