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

part of '../../../persistence_contract.dart';

/// Document field names for [Task] documents.
abstract final class TaskDocumentFields {
  /// Stable storage field for `schemaVersion`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const schemaVersion = DocumentFields.schemaVersion;

  /// Stable storage field for `id`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const id = DocumentFields.id;

  /// Stable storage field for `ownerId`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const ownerId = DocumentFields.ownerId;

  /// Stable storage field for `revision`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const revision = DocumentFields.revision;

  /// Stable storage field for `title`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const title = 'title';

  /// Stable storage field for `projectId`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const projectId = 'projectId';

  /// Stable storage field for `type`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const type = 'type';

  /// Stable storage field for `status`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const status = 'status';

  /// Stable storage field for `priority`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const priority = 'priority';

  /// Stable storage field for `reward`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const reward = 'reward';

  /// Stable storage field for `difficulty`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const difficulty = 'difficulty';

  /// Stable storage field for `durationMinutes`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const durationMinutes = 'durationMinutes';

  /// Stable storage field for `scheduledStart`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const scheduledStart = 'scheduledStart';

  /// Stable storage field for `scheduledEnd`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const scheduledEnd = 'scheduledEnd';

  /// Stable storage field for `actualStart`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const actualStart = 'actualStart';

  /// Stable storage field for `actualEnd`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const actualEnd = 'actualEnd';

  /// Stable storage field for `completedAt`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const completedAt = 'completedAt';

  /// Stable storage field for `parentTaskId`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const parentTaskId = 'parentTaskId';

  /// Stable storage field for `backlogTags`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const backlogTags = 'backlogTags';

  /// Stable storage field for `reminderOverride`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const reminderOverride = 'reminderOverride';

  /// Stable storage field for `createdAt`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const createdAt = DocumentFields.createdAt;

  /// Stable storage field for `updatedAt`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const updatedAt = DocumentFields.updatedAt;

  /// Stable storage field for `stats`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const stats = 'stats';

  /// Stable storage field for `backlogEnteredAt`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const backlogEnteredAt = 'backlogEnteredAt';

  /// Stable storage field for `backlogEnteredAtProvenance`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const backlogEnteredAtProvenance = 'backlogEnteredAtProvenance';

  /// Stable storage field for `all`.
  /// Keeping the key in one documented constant protects repository adapters, migrations, and tests from drifting string literals.
  static const all = <String>{
    ...DocumentFields.common,
    title,
    projectId,
    type,
    status,
    priority,
    reward,
    difficulty,
    durationMinutes,
    scheduledStart,
    scheduledEnd,
    actualStart,
    actualEnd,
    completedAt,
    parentTaskId,
    backlogTags,
    reminderOverride,
    stats,
    backlogEnteredAt,
    backlogEnteredAtProvenance,
  };
}
