mirror of
https://github.com/pupperpowell/bibdle.git
synced 2026-04-05 17:33:31 -04:00
68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { json } from '@sveltejs/kit';
|
|
import type { RequestHandler } from './$types';
|
|
import { getRandomVersesFromBook } from '$lib/server/xml-bible';
|
|
|
|
interface VerseOption {
|
|
text: string;
|
|
isImposter: boolean;
|
|
ref: string;
|
|
}
|
|
|
|
export const GET: RequestHandler = async () => {
|
|
try {
|
|
// Select two different random books (1-66)
|
|
let book1Num = Math.floor(Math.random() * 66) + 1;
|
|
let book2Num = Math.floor(Math.random() * 66) + 1;
|
|
while (book2Num === book1Num) {
|
|
book2Num = Math.floor(Math.random() * 66) + 1;
|
|
}
|
|
|
|
// Randomly decide which is majority
|
|
const majorityBookNum = Math.random() < 0.5 ? book1Num : book2Num;
|
|
const imposterBookNum = majorityBookNum === book1Num ? book2Num : book1Num;
|
|
|
|
// Get 3 random verses from majority book
|
|
const options: VerseOption[] = [];
|
|
for (let i = 0; i < 3; i++) {
|
|
const verseData = getRandomVersesFromBook(majorityBookNum, 1);
|
|
if (!verseData) {
|
|
throw new Error('Failed to get majority verse');
|
|
}
|
|
options.push({
|
|
text: verseData.verses[0],
|
|
isImposter: false,
|
|
ref: `${verseData.bookName} ${verseData.chapter}:${verseData.startVerse}`
|
|
});
|
|
}
|
|
|
|
// Get 1 random verse from imposter book
|
|
const imposterVerseData = getRandomVersesFromBook(imposterBookNum, 1);
|
|
if (!imposterVerseData) {
|
|
throw new Error('Failed to get imposter verse');
|
|
}
|
|
options.push({
|
|
text: imposterVerseData.verses[0],
|
|
isImposter: true,
|
|
ref: `${imposterVerseData.bookName} ${imposterVerseData.chapter}:${imposterVerseData.startVerse}`
|
|
});
|
|
|
|
// Fisher-Yates shuffle
|
|
for (let i = options.length - 1; i > 0; i--) {
|
|
const j = Math.floor(Math.random() * (i + 1));
|
|
[options[i], options[j]] = [options[j], options[i]];
|
|
}
|
|
|
|
const verses = options.map(o => o.text);
|
|
const refs = options.map(o => o.ref);
|
|
const imposterIndex = options.findIndex(o => o.isImposter);
|
|
|
|
return json({
|
|
verses,
|
|
refs,
|
|
imposterIndex
|
|
});
|
|
} catch (error) {
|
|
console.error('Imposter API error:', error);
|
|
return json({ error: 'Failed to generate imposter game' }, { status: 500 });
|
|
}
|
|
}; |