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

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

/// Draft used when creating a locked block.
class LockedBlockDraft {
  /// Creates a `LockedBlockDraft` 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 LockedBlockDraft({
    this.id,
    required this.name,
    required this.startTime,
    required this.endTime,
    this.date,
    this.recurrence,
    this.hiddenByDefault = true,
    this.projectId,
  });

  /// 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 `startTime` value for this object.
  /// This field is part of the explicit state that downstream scheduling, persistence, or UI code reads when composing behavior.
  final ClockTime startTime;

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

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

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

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

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