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

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

/// Scheduling behavior category.
///
/// This enum is one of the central concepts in the planner. The type answers
/// the question: "how should the scheduler treat this item?" It is separate
/// from [TaskStatus], which answers "where is this item in its lifecycle?"
///
/// For example, a flexible task can be planned, completed, missed, or moved to
/// backlog. A locked item, by contrast, acts more like a calendar constraint
/// than a normal task card. Keeping behavior and lifecycle separate makes later
/// UI and persistence logic easier to reason about.
enum TaskType {
  /// Movable planned work.
  flexible,

  /// Required visible block that should not be moved automatically.
  inflexible,

  /// Required visible task that remains actionable if missed.
  critical,

  /// Hidden scheduling constraint, not a task card.
  locked,

  /// Unplanned completed/logged task.
  surprise,

  /// Intentional rest time.
  freeSlot,
}
