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

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

/// Minimum sample sizes for deterministic project suggestions.
class ProjectSuggestionPolicy {
  /// Creates a `ProjectSuggestionPolicy` 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 ProjectSuggestionPolicy({
    this.minimumDurationSamples = 3,
    this.minimumCompletionTimeSamples = 3,
    this.minimumRewardSamples = 3,
    this.minimumDifficultySamples = 3,
    this.minimumReminderSamples = 3,
  });

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

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

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

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

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