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

part of '../../project_statistics.dart';

/// Optional suggestion set derived from one project's observations.
class ProjectSuggestionSet {
  /// Creates a `ProjectSuggestionSet` instance with the values required by its invariants.
  /// Callers should pass already-normalized scheduler data because validation and defaulting belong at the model or service boundary, not in arbitrary UI code.
  const ProjectSuggestionSet({
    required this.statistics,
    this.durationMinutes,
    this.completionTimeBucket,
    this.reward,
    this.difficulty,
    this.reminderProfile,
  });

  /// Stores the `statistics` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectStatistics statistics;

  /// Stores the `durationMinutes` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectSuggestion<int>? durationMinutes;

  /// Stores the `completionTimeBucket` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectSuggestion<ProjectCompletionTimeBucket>? completionTimeBucket;

  /// Stores the `reward` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectSuggestion<RewardLevel>? reward;

  /// Stores the `difficulty` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectSuggestion<DifficultyLevel>? difficulty;

  /// Stores the `reminderProfile` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ProjectSuggestion<ReminderProfile>? reminderProfile;
}
