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

part of '../../application_management.dart';

/// Draft used when creating a project.
class ProjectProfileDraft {
  /// Creates a `ProjectProfileDraft` 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 ProjectProfileDraft({
    this.id,
    required this.name,
    required this.colorKey,
    this.defaultPriority = PriorityLevel.medium,
    this.defaultReward = RewardLevel.notSet,
    this.defaultDifficulty = DifficultyLevel.notSet,
    this.defaultReminderProfile = ReminderProfile.gentle,
    this.defaultDurationMinutes,
  });

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

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

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

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

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

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

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

  /// Stores the `defaultDurationMinutes` 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? defaultDurationMinutes;
}
