# 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 / 0Front
"""
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