const express = require('express');
const cors = require('cors');
const fs = require('fs');

const app = express();
app.use(cors());
app.use(express.json());

const questions = JSON.parse(fs.readFileSync('./questions.json', 'utf-8'));

function shuffle(array) {
  return array.sort(() => Math.random() - 0.5);
}

// Hilfsfunktion zur Auswahl einer täglichen Frage
function getDailyQuestion() {
  const today = new Date().toISOString().split('T')[0]; // z. B. "2025-06-16"
  // Einfache Hash-Funktion: Summe der ASCII-Werte des Datumsstrings
  const hash = today.split('').reduce((sum, char) => sum + char.charCodeAt(0), 0);
  const index = hash % questions.length; // Modulo für Index in questions
  return questions[index];
}

// Neue Session starten
app.get('/api/new-session', (req, res) => {
  const isDaily = req.query.daily === 'true';
  let question;

  if (isDaily) {
    question = getDailyQuestion();
  } else {
    question = questions[Math.floor(Math.random() * questions.length)];
  }

  const shuffledHints = shuffle([...question.hints]);

  res.json({
    id: question.id,
    hint: shuffledHints[0],
    totalHints: shuffledHints.length,
    digits: String(question.answer).length,
    answer: String(question.answer),
    allHints: shuffledHints,
    link: question.link || null,
    isDailyChallenge: isDaily // Neues Feld
  });
});

// Rateversuch mit Rundenfortschritt
app.post('/api/guess', (req, res) => {
  const { id, guess, round } = req.body;
  const question = questions.find(q => q.id === id);

  if (!question) {
    return res.status(404).json({ message: "Frage nicht gefunden." });
  }

  const numericGuess = Number(guess);
  let feedback = "";

  if (numericGuess === question.answer) {
    feedback = "Richtig";
  } else if (numericGuess > question.answer) {
    feedback = numericGuess - question.answer > 100 ? "Viel zu hoch" : "Zu hoch";
  } else {
    feedback = question.answer - numericGuess > 100 ? "Viel zu niedrig" : "Zu niedrig";
  }

  res.json({
    correct: numericGuess === question.answer,
    feedback,
    nextHint: question.hints[round] || null,
    explanation: numericGuess === question.answer || round === 4 ? question.explanation : null,
    link: question.link || null
  });
});

app.listen(3000, () => {
  console.log("✅ FaktenZahl Backend läuft auf http://localhost:3000");
});