"""
AI Processing - Print Version Generator: Multiple Choice.
Generates printable HTML for multiple-choice worksheets.
"""
from pathlib import Path
import json
import logging
logger = logging.getLogger(__name__)
def generate_print_version_mc(mc_path: Path, include_answers: bool = False) -> str:
"""
Generiert eine druckbare HTML-Version der Multiple-Choice-Fragen.
Args:
mc_path: Pfad zur *_mc.json Datei
include_answers: True fuer Loesungsblatt mit markierten richtigen Antworten
Returns:
HTML-String (zum direkten Ausliefern)
"""
if not mc_path.exists():
raise FileNotFoundError(f"MC-Datei nicht gefunden: {mc_path}")
mc_data = json.loads(mc_path.read_text(encoding="utf-8"))
questions = mc_data.get("questions", [])
metadata = mc_data.get("metadata", {})
title = metadata.get("source_title", "Arbeitsblatt")
subject = metadata.get("subject", "")
grade = metadata.get("grade_level", "")
html_parts = []
html_parts.append("""
""" + title + """ - Multiple Choice
""")
# Header
version_text = "Loesungsblatt" if include_answers else "Multiple Choice Test"
html_parts.append(f"{title}
")
html_parts.append(f"{version_text}")
if subject:
html_parts.append(f" | Fach: {subject}")
if grade:
html_parts.append(f" | Klasse: {grade}")
html_parts.append(f" | Anzahl Fragen: {len(questions)}
")
if not include_answers:
html_parts.append("")
html_parts.append("Anleitung: Kreuze bei jeder Frage die richtige Antwort an. ")
html_parts.append("Es ist immer nur eine Antwort richtig.")
html_parts.append("
")
# Fragen
for idx, q in enumerate(questions, 1):
html_parts.append("")
html_parts.append(f"
Frage {idx}
")
html_parts.append(f"
{q.get('question', '')}
")
html_parts.append("
")
correct_answer = q.get("correct_answer", "")
for opt in q.get("options", []):
opt_id = opt.get("id", "")
is_correct = opt_id == correct_answer
opt_class = "option"
checkbox_class = "option-checkbox"
if include_answers and is_correct:
opt_class += " option-correct"
checkbox_class += " checked"
html_parts.append(f"
")
html_parts.append(f"
")
html_parts.append(f"
{opt_id})")
html_parts.append(f"
{opt.get('text', '')}")
html_parts.append("
")
html_parts.append("
")
# Erklaerung nur bei Loesungsblatt
if include_answers and q.get("explanation"):
html_parts.append(f"
Erklaerung: {q.get('explanation')}
")
html_parts.append("
")
# Loesungsschluessel (kompakt) - nur bei Loesungsblatt
if include_answers:
html_parts.append("")
html_parts.append("
Loesungsschluessel
")
html_parts.append("
")
for idx, q in enumerate(questions, 1):
html_parts.append("
")
html_parts.append(f"{idx}. ")
html_parts.append(f"{q.get('correct_answer', '')}")
html_parts.append("
")
html_parts.append("
")
html_parts.append("
")
html_parts.append("")
return "\n".join(html_parts)