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

part of '../../../time_contracts.dart';

/// Represents `ResolvedLocalDateTime` within the pure scheduler domain package.
/// The type groups related data and behavior behind a named API so readers can understand this part of the scheduler without relying on tribal knowledge about the surrounding files.
class ResolvedLocalDateTime {
  /// Creates a `ResolvedLocalDateTime` 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 ResolvedLocalDateTime({
    required this.date,
    required this.wallTime,
    required this.timeZoneId,
    required this.instant,
    required this.resolution,
    required this.utcOffset,
  });

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

  /// Stores the `timeZoneId` 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 timeZoneId;

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

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

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