File size: 960 Bytes
877add7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""Scenario loading utilities."""

from __future__ import annotations

import json
from pathlib import Path
from typing import Optional

from app.common.enums import Difficulty
from app.common.types import PatientProfile
from app.simulator.scenario_generator import generate_patient_scenario


def _scenario_path(root: Path, difficulty: Difficulty, scenario_id: str) -> Path:
    return root / "data" / "scenarios" / difficulty.value / f"{scenario_id}.json"


def load_or_generate_scenario(
    root: Path,
    difficulty: Difficulty,
    scenario_id: Optional[str],
    patient_id: Optional[str],
    seed: int,
) -> PatientProfile:
    if scenario_id:
        path = _scenario_path(root, difficulty, scenario_id)
        if path.exists():
            payload = json.loads(path.read_text(encoding="utf-8"))
            return PatientProfile.model_validate(payload)
    return generate_patient_scenario(difficulty=difficulty, patient_id=patient_id, seed=seed)