112 lines
3.7 KiB
PHP
112 lines
3.7 KiB
PHP
<?php
|
||
session_start();
|
||
|
||
require_once __DIR__ . '/../ai/LocalAIApi.php';
|
||
require_once __DIR__ . '/../db/config.php';
|
||
|
||
header('Content-Type: application/json');
|
||
|
||
$questions = [
|
||
"I wake up feeling tired, even after a full night’s sleep.",
|
||
"By midday, I already feel mentally drained and out of energy.",
|
||
"I feel emotionally numb, detached, or ‘on autopilot’ most of the time.",
|
||
"Things that used to excite me now feel pointless or like a chore.",
|
||
"I feel irritated or cynical about people I work or study with.",
|
||
"I struggle to focus and constantly procrastinate, even on important tasks.",
|
||
"I feel guilty for not doing ‘enough’, no matter how much I actually do.",
|
||
"I often think about quitting everything for a while or disappearing from social media and work.",
|
||
"I use caffeine, sugar, nicotine, alcohol, or scrolling to ‘numb out’ instead of resting.",
|
||
"I feel like my life is just surviving, not really living"
|
||
];
|
||
|
||
if (!isset($_SESSION['question_index'])) {
|
||
$_SESSION['question_index'] = 0;
|
||
$_SESSION['answers'] = [];
|
||
}
|
||
|
||
$response = [];
|
||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||
$data = json_decode(file_get_contents('php://input'), true);
|
||
$answer = $data['answer'] ?? null;
|
||
|
||
if ($answer !== null && $_SESSION['question_index'] < count($questions)) {
|
||
$_SESSION['answers'][$_SESSION['question_index']] = $answer;
|
||
$_SESSION['question_index']++;
|
||
}
|
||
}
|
||
|
||
if ($_SESSION['question_index'] < count($questions)) {
|
||
$response['question'] = $questions[$_SESSION['question_index']];
|
||
} else {
|
||
// Survey is complete, analyze the answers
|
||
$formatted_answers = [];
|
||
foreach ($_SESSION['answers'] as $index => $answer) {
|
||
$formatted_answers[] = "Q: " . $questions[$index] . "\nA: " . $answer;
|
||
}
|
||
$prompt = <<<EOT
|
||
You are a burnout analysis expert. A user has answered a survey on a 1-5 scale (1='Never', 5='Always').
|
||
Analyze their answers and return ONLY a raw JSON object with the following structure:
|
||
{
|
||
"scores": {
|
||
"Exhaustion": <number>,
|
||
"Cynicism": <number>,
|
||
"Inefficacy": <number>
|
||
},
|
||
"analysis": {
|
||
"overallSummary": "<string>",
|
||
"exhaustionSummary": "<string>",
|
||
"cynicismSummary": "<string>",
|
||
"inefficacySummary": "<string>"
|
||
},
|
||
"recommendations": [
|
||
{
|
||
"title": "<string>",
|
||
"description": "<string>"
|
||
}
|
||
],
|
||
"nextSteps": [
|
||
"<string>"
|
||
]
|
||
}
|
||
|
||
User's Answers:
|
||
EOT;
|
||
$prompt .= "\n" . implode("\n", $formatted_answers);
|
||
|
||
$ai_response = LocalAIApi::createResponse([
|
||
'input' => [
|
||
['role' => 'system', 'content' => 'You are a burnout analysis expert.'],
|
||
['role' => 'user', 'content' => $prompt],
|
||
],
|
||
]);
|
||
|
||
if (!empty($ai_response['success'])) {
|
||
$decoded_response = LocalAIApi::decodeJsonFromResponse($ai_response);
|
||
$_SESSION['results'] = $decoded_response;
|
||
|
||
if (isset($_SESSION['user_id'])) {
|
||
try {
|
||
$pdo = db();
|
||
$stmt = $pdo->prepare('INSERT INTO survey_results (user_id, results_json) VALUES (:user_id, :results_json)');
|
||
$stmt->execute([
|
||
':user_id' => $_SESSION['user_id'],
|
||
':results_json' => json_encode($decoded_response)
|
||
]);
|
||
} catch (PDOException $e) {
|
||
// Optionally handle or log the database error
|
||
}
|
||
}
|
||
} else {
|
||
// Handle AI API error, maybe provide default results
|
||
$_SESSION['results'] = [
|
||
'scores' => ['Exhaustion' => 0, 'Cynicism' => 0, 'Inefficacy' => 0],
|
||
'recommendations' => ['Could not analyze results at this time. Please try again later.']
|
||
];
|
||
}
|
||
|
||
$response['redirect'] = 'results.php';
|
||
}
|
||
|
||
echo json_encode($response);
|