public record SimulationConfigResponse(
    bool Enabled,
    double? MaxSpeed = null,
    int? MaxConcurrentRuns = null);

public record ScenarioSummaryResponse(
    string Id,
    string Name,
    string? Description,
    int? DurationMinutes,
    IReadOnlyList<string>? Tags,
    string Department,
    int EventCount,
    int ExpectedOutcomeCount);

public record StartSimulationRunRequest(string ScenarioId, double Speed = 60);

public record StartSimulationSessionRequest(double? Speed = null);

public record SessionPresetResponse(
    string Id,
    string Name,
    string Goal,
    int EstimatedMinutes,
    double DefaultSpeed,
    IReadOnlyList<ScenarioSummaryResponse> Scenarios);

public record SimulationSessionResponse(
    string SessionId,
    string Name,
    DateTimeOffset StartedAt,
    IReadOnlyList<Guid> RunIds);

public record SimulationDataSummaryResponse(
    int SimulatedPatients,
    int Encounters,
    int Observations,
    int Alerts,
    int ActiveRuns);

public record SimulationPurgeResponse(
    int PatientsDeleted,
    int EncountersDeleted,
    int AlertsDeleted,
    int RunsCleared);

public record SimulationRunResponse(
    Guid RunId,
    string ScenarioId,
    string ScenarioName,
    string Status,
    double Speed,
    Guid? PatientId,
    Guid? EncounterId,
    string? SessionId,
    string PatientDisplayName,
    DateTimeOffset StartedAt,
    double ElapsedRealSeconds,
    double LastOffsetMinutes,
    double TotalOffsetMinutes,
    double ProgressPercent,
    int ObservationsSent,
    int MedicationsSent,
    int OrdersPlaced,
    string? FailureReason);
