#!/usr/bin/env node
/**
 * Script zum Hinzufügen von Grammatik-Übungen zu bestehenden Kursen
 * 
 * Verwendung:
 * node backend/scripts/add-grammar-exercises-to-existing-courses.js
 * 
 * Fügt Beispiel-Grammatik-Übungen zu allen Grammar-Lektionen hinzu, die noch keine Übungen haben.
 */

import { sequelize } from '../utils/sequelize.js';
import VocabCourseLesson from '../models/community/vocab_course_lesson.js';
import VocabGrammarExercise from '../models/community/vocab_grammar_exercise.js';
import User from '../models/community/user.js';

async function findOrCreateSystemUser() {
  let systemUser = await User.findOne({ 
    where: { 
      username: 'system' 
    } 
  });

  if (!systemUser) {
    systemUser = await User.findOne({ 
      where: { 
        username: 'admin' 
      } 
    });
  }

  if (!systemUser) {
    console.error('❌ System-Benutzer nicht gefunden. Bitte erstelle einen System-Benutzer.');
    throw new Error('System user not found');
  }

  return systemUser;
}

// Erstelle Beispiel-Grammatik-Übungen für eine Grammar-Lektion
function createExampleGrammarExercises(lessonId, lessonTitle, ownerUserId) {
  const exercises = [];
  
  // Beispiel-Übung 1: Gap Fill (Lückentext)
  exercises.push({
    lessonId: lessonId,
    exerciseTypeId: 1, // gap_fill
    exerciseNumber: 1,
    title: `${lessonTitle} - Übung 1`,
    instruction: 'Fülle die Lücken mit den richtigen Wörtern.',
    questionData: JSON.stringify({
      type: 'gap_fill',
      text: 'Hallo! Wie geht es {gap}? Mir geht es {gap}, danke!',
      gaps: 2
    }),
    answerData: JSON.stringify({
      type: 'gap_fill',
      answers: ['dir', 'gut']
    }),
    explanation: 'Die richtigen Antworten sind "dir" und "gut".',
    createdByUserId: ownerUserId
  });

  // Beispiel-Übung 2: Multiple Choice
  exercises.push({
    lessonId: lessonId,
    exerciseTypeId: 2, // multiple_choice
    exerciseNumber: 2,
    title: `${lessonTitle} - Übung 2`,
    instruction: 'Wähle die richtige Antwort aus.',
    questionData: JSON.stringify({
      type: 'multiple_choice',
      question: 'Wie sagt man "Guten Tag"?',
      options: ['Guten Tag', 'Gute Nacht', 'Auf Wiedersehen', 'Tschüss']
    }),
    answerData: JSON.stringify({
      type: 'multiple_choice',
      correctAnswer: 0
    }),
    explanation: 'Die richtige Antwort ist "Guten Tag".',
    createdByUserId: ownerUserId
  });

  return exercises;
}

async function addGrammarExercisesToExistingCourses() {
  await sequelize.authenticate();
  console.log('Datenbankverbindung erfolgreich hergestellt.\n');

  const systemUser = await findOrCreateSystemUser();
  console.log(`Verwende System-Benutzer: ${systemUser.username} (ID: ${systemUser.id})\n`);

  // Finde alle Grammar-Lektionen ohne Übungen
  const grammarLessons = await sequelize.query(
    `SELECT l.id, l.title, l.course_id, c.owner_user_id
     FROM community.vocab_course_lesson l
     JOIN community.vocab_course c ON c.id = l.course_id
     WHERE l.lesson_type = 'grammar'
     AND NOT EXISTS (
       SELECT 1 FROM community.vocab_grammar_exercise e
       WHERE e.lesson_id = l.id
     )
     ORDER BY l.course_id, l.lesson_number`,
    {
      type: sequelize.QueryTypes.SELECT
    }
  );

  console.log(`Gefunden: ${grammarLessons.length} Grammar-Lektionen ohne Übungen\n`);

  if (grammarLessons.length === 0) {
    console.log('✅ Alle Grammar-Lektionen haben bereits Übungen.');
    return;
  }

  let addedCount = 0;
  for (const lesson of grammarLessons) {
    const exercises = createExampleGrammarExercises(lesson.id, lesson.title, lesson.owner_user_id);
    
    for (const exercise of exercises) {
      await VocabGrammarExercise.create(exercise);
      addedCount++;
    }
    
    console.log(`✅ ${exercises.length} Übungen zu "${lesson.title}" hinzugefügt`);
  }

  console.log(`\n🎉 Zusammenfassung:`);
  console.log(`   ${addedCount} Grammatik-Übungen zu ${grammarLessons.length} Lektionen hinzugefügt`);
}

addGrammarExercisesToExistingCourses()
  .then(() => {
    sequelize.close();
    process.exit(0);
  })
  .catch((error) => {
    console.error('❌ Fehler:', error);
    sequelize.close();
    process.exit(1);
  });
