File size: 2,420 Bytes
793ba48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import json
import os
import random
from typing import List, Dict, Any



# PATH SETUP (Docker-safe)

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.dirname(BASE_DIR)

DATASET_PATH = os.path.join(PROJECT_ROOT, "datasets", "disorders.json")



# LOAD DATASET

def load_disorders() -> List[Dict[str, Any]]:
    try:
        print(f"Loading dataset from: {DATASET_PATH}")

        with open(DATASET_PATH, "r", encoding="utf-8") as f:
            data = json.load(f)

        if not isinstance(data, list):
            raise ValueError("Dataset must be a list of disorder objects")

        print(f"Loaded {len(data)} disorders successfully ✅")
        return data

    except FileNotFoundError:
        print(f"❌ File not found: {DATASET_PATH}")
        return []

    except json.JSONDecodeError:
        print(f"❌ Invalid JSON format in {DATASET_PATH}")
        return []

    except Exception as e:
        print(f"❌ Unexpected error: {e}")
        return []



# INITIALIZE DATA

disorders: List[Dict[str, Any]] = load_disorders()



# CREATE FAST LOOKUP MAP

disorders_map: Dict[str, Dict[str, Any]] = {
    d["name"]: d for d in disorders
}



# FUNCTIONS


def get_random_disorder(n: int = 1) -> List[Dict[str, Any]]:
    if not disorders:
        return []

    n = min(n, len(disorders))
    return random.sample(disorders, n)


def get_random_disorder_names(n: int = 1) -> List[str]:
    return [d["name"] for d in get_random_disorder(n)]


def get_disorder_info(name: str) -> Dict[str, Any]:
    return disorders_map.get(name, {})


def get_symptoms(name: str, category: str = "emotional") -> List[str]:
    disorder = get_disorder_info(name)
    return disorder.get("symptoms", {}).get(category, [])


def get_trigger_keywords(name: str) -> List[str]:
    disorder = get_disorder_info(name)
    return disorder.get("trigger_keywords", [])


def get_random_symptom(name: str, category: str = "emotional") -> str:
    symptoms = get_symptoms(name, category)
    return random.choice(symptoms) if symptoms else ""



# TEST (only runs directly)

if __name__ == "__main__":
    print("Random disorder:", get_random_disorder(2))

    if disorders:
        name = disorders[0]["name"]
        print("Sample disorder:", name)
        print("Symptoms:", get_random_symptom(name))