# src/app/viewers.py import json from pathlib import Path from typing import Dict, List from .config import get_user_dir from .flashcards_tools import load_deck def _build_flipbook_html(deck_name: str, cards: List[Dict]) -> str: """ Builds a simple HTML+JS flip-style viewer for a deck of cards. Front = card['front'], Back = card['back']. """ js_cards = json.dumps( [ {"front": c.get("front", ""), "back": c.get("back", "")} for c in cards ], ensure_ascii=False, ) html = f""" Flashcards — {deck_name}

{deck_name}

Card 0 / 0 Front
""" return html def generate_flashcard_viewer_for_user(username: str, deck_path: Path) -> Path: """ Generates an HTML flipbook viewer for the given deck in the user's /viewers directory, and returns the path to the HTML file. """ deck = load_deck(deck_path) deck_name = deck.get("name", deck_path.stem) cards = deck.get("cards", []) html_str = _build_flipbook_html(deck_name, cards) user_dir = get_user_dir(username) viewer_dir = user_dir / "viewers" viewer_dir.mkdir(parents=True, exist_ok=True) safe_name = deck_path.stem out_path = viewer_dir / f"{safe_name}_viewer.html" out_path.write_text(html_str, encoding="utf-8") return out_path