File size: 10,246 Bytes
5d7e9a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import json
import os
from datetime import datetime

# Base 20 questions - balanced across dimensions
BASE_QUESTIONS = [
    # E/I questions (5 total)
    {"id": 1, "text": "You regularly make new friends.", "dimension": "E", "reverse": False},
    {"id": 2, "text": "You feel comfortable just walking up to someone you find interesting and striking up a conversation.", "dimension": "E", "reverse": False},
    {"id": 3, "text": "At social events, you rarely try to introduce yourself to new people and mostly talk to the ones you already know.", "dimension": "I", "reverse": False},
    {"id": 4, "text": "You prefer to work alone rather than in a team.", "dimension": "I", "reverse": False},
    {"id": 5, "text": "You enjoy participating in group activities.", "dimension": "E", "reverse": False},
    
    # S/N questions (5 total)
    {"id": 6, "text": "You are not too interested in discussing various interpretations and analyses of creative works.", "dimension": "S", "reverse": False},
    {"id": 7, "text": "You prefer practical, concrete information over abstract theories.", "dimension": "S", "reverse": False},
    {"id": 8, "text": "You spend a lot of your free time exploring various random topics that pique your interest.", "dimension": "N", "reverse": False},
    {"id": 9, "text": "You like books and movies that make you come up with your own interpretation of the ending.", "dimension": "N", "reverse": False},
    {"id": 10, "text": "You enjoy exploring new ideas and possibilities.", "dimension": "N", "reverse": False},
    
    # T/F questions (5 total)
    {"id": 11, "text": "You usually stay calm, even under a lot of pressure.", "dimension": "T", "reverse": False},
    {"id": 12, "text": "You are more inclined to follow your head than your heart.", "dimension": "T", "reverse": False},
    {"id": 13, "text": "Seeing other people cry can easily make you feel like you want to cry too.", "dimension": "F", "reverse": False},
    {"id": 14, "text": "You are very sentimental.", "dimension": "F", "reverse": False},
    {"id": 15, "text": "Your happiness comes more from helping others accomplish things than your own accomplishments.", "dimension": "F", "reverse": False},
    
    # J/P questions (5 total)
    {"id": 16, "text": "You often make a backup plan for a backup plan.", "dimension": "J", "reverse": False},
    {"id": 17, "text": "You prefer to completely finish one project before starting another.", "dimension": "J", "reverse": False},
    {"id": 18, "text": "You like to use organizing tools like schedules and lists.", "dimension": "J", "reverse": False},
    {"id": 19, "text": "You usually prefer just doing what you feel like at any given moment instead of planning a particular daily routine.", "dimension": "P", "reverse": False},
    {"id": 20, "text": "You are interested in so many things that you find it difficult to choose what to try next.", "dimension": "P", "reverse": False}
]

# Additional 20 questions for 40-question version
EXTENDED_QUESTIONS = [
    # E/I questions (5 more)
    {"id": 21, "text": "You find it easy to stay relaxed and focused even when there is some pressure.", "dimension": "I", "reverse": False},
    {"id": 22, "text": "You are energized by being around other people.", "dimension": "E", "reverse": False},
    {"id": 23, "text": "You prefer to have a few close friends rather than many acquaintances.", "dimension": "I", "reverse": False},
    {"id": 24, "text": "You enjoy being the center of attention.", "dimension": "E", "reverse": False},
    {"id": 25, "text": "You need quiet time to recharge after social activities.", "dimension": "I", "reverse": False},
    
    # S/N questions (5 more)
    {"id": 26, "text": "You focus on the here-and-now rather than possibilities for the future.", "dimension": "S", "reverse": False},
    {"id": 27, "text": "You are more interested in what could be than what is.", "dimension": "N", "reverse": False},
    {"id": 28, "text": "You prefer to work with established methods rather than experiment with new approaches.", "dimension": "S", "reverse": False},
    {"id": 29, "text": "You often get so lost in thoughts that you ignore or forget your surroundings.", "dimension": "N", "reverse": False},
    {"id": 30, "text": "You trust experience more than theory.", "dimension": "S", "reverse": False},
    
    # T/F questions (5 more)
    {"id": 31, "text": "You consider yourself more practical than creative.", "dimension": "T", "reverse": False},
    {"id": 32, "text": "You find it easy to empathize with a person whose experiences are very different from yours.", "dimension": "F", "reverse": False},
    {"id": 33, "text": "You think that everyone's views should be respected regardless of whether they are supported by facts or not.", "dimension": "F", "reverse": False},
    {"id": 34, "text": "You feel more drawn to places with busy, bustling atmospheres than quiet, intimate places.", "dimension": "T", "reverse": False},
    {"id": 35, "text": "You are more concerned with truth than with people's feelings.", "dimension": "T", "reverse": False},
    
    # J/P questions (5 more)
    {"id": 36, "text": "You prefer to improvise rather than spend time coming up with a detailed plan.", "dimension": "P", "reverse": False},
    {"id": 37, "text": "You find deadlines stressful.", "dimension": "P", "reverse": False},
    {"id": 38, "text": "You prefer to have everything planned out in advance.", "dimension": "J", "reverse": False},
    {"id": 39, "text": "You enjoy having a clear routine in your daily life.", "dimension": "J", "reverse": False},
    {"id": 40, "text": "You often leave things to the last minute.", "dimension": "P", "reverse": False}
]

# Additional 20 questions for 60-question version
ADVANCED_QUESTIONS = [
    # E/I questions (5 more)
    {"id": 41, "text": "You feel comfortable being spontaneous in social situations.", "dimension": "E", "reverse": False},
    {"id": 42, "text": "You prefer written communication over verbal communication.", "dimension": "I", "reverse": False},
    {"id": 43, "text": "You enjoy networking events and meeting new people.", "dimension": "E", "reverse": False},
    {"id": 44, "text": "You prefer to think things through before speaking.", "dimension": "I", "reverse": False},
    {"id": 45, "text": "You feel energized after attending parties or social gatherings.", "dimension": "E", "reverse": False},
    
    # S/N questions (5 more)
    {"id": 46, "text": "You are more interested in the big picture than the details.", "dimension": "N", "reverse": False},
    {"id": 47, "text": "You prefer concrete examples over abstract concepts.", "dimension": "S", "reverse": False},
    {"id": 48, "text": "You enjoy brainstorming and generating new ideas.", "dimension": "N", "reverse": False},
    {"id": 49, "text": "You focus on facts and details rather than interpretations.", "dimension": "S", "reverse": False},
    {"id": 50, "text": "You are drawn to theoretical and philosophical discussions.", "dimension": "N", "reverse": False},
    
    # T/F questions (5 more)
    {"id": 51, "text": "You make decisions based on logic rather than feelings.", "dimension": "T", "reverse": False},
    {"id": 52, "text": "You are sensitive to the emotions of others.", "dimension": "F", "reverse": False},
    {"id": 53, "text": "You value harmony and cooperation over competition.", "dimension": "F", "reverse": False},
    {"id": 54, "text": "You prefer objective analysis over personal considerations.", "dimension": "T", "reverse": False},
    {"id": 55, "text": "You find it important to maintain personal relationships even when it's inconvenient.", "dimension": "F", "reverse": False},
    
    # J/P questions (5 more)
    {"id": 56, "text": "You like to keep your options open rather than commit to a plan.", "dimension": "P", "reverse": False},
    {"id": 57, "text": "You prefer structure and organization in your work environment.", "dimension": "J", "reverse": False},
    {"id": 58, "text": "You enjoy exploring different possibilities before making a decision.", "dimension": "P", "reverse": False},
    {"id": 59, "text": "You feel satisfied when you complete tasks ahead of schedule.", "dimension": "J", "reverse": False},
    {"id": 60, "text": "You adapt easily to unexpected changes in plans.", "dimension": "P", "reverse": False}
]

# Question sets
DEFAULT_QUESTIONS = BASE_QUESTIONS
FORTY_QUESTIONS = BASE_QUESTIONS + EXTENDED_QUESTIONS
SIXTY_QUESTIONS = BASE_QUESTIONS + EXTENDED_QUESTIONS + ADVANCED_QUESTIONS

def get_questionnaire_by_length(length=20):
    """Get questionnaire by length"""
    if length == 40:
        return FORTY_QUESTIONS
    elif length == 60:
        return SIXTY_QUESTIONS
    else:
        return DEFAULT_QUESTIONS

def load_questionnaire(file_path=None, length=20):
    """Load questionnaire from file or return questions by length"""
    if file_path and os.path.exists(file_path):
        with open(file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
            # If loading from file, use the questions in the file
            if 'questionnaire' in data and 'questions' in data['questionnaire']:
                return data['questionnaire']['questions']
            return data.get('questions', get_questionnaire_by_length(length))
    return get_questionnaire_by_length(length)

def save_questionnaire(questionnaire_data, file_path):
    """Save questionnaire data to JSON file"""
    try:
        # Add timestamp
        questionnaire_data['metadata']['saved_at'] = datetime.now().isoformat()
        
        # Use temp directory for HF Spaces compatibility
        import tempfile
        temp_dir = tempfile.gettempdir()
        full_path = os.path.join(temp_dir, os.path.basename(file_path))
        
        with open(full_path, 'w', encoding='utf-8') as f:
            json.dump(questionnaire_data, f, indent=2, ensure_ascii=False)
        return full_path  # Return actual path used
    except Exception as e:
        print(f"Error saving questionnaire: {e}")
        return False

if __name__ == "__main__":
    # Test the functions
    questions = load_questionnaire()
    print(f"Loaded {len(questions)} questions")
    print(f"First question: {questions[0]}")