#!/usr/bin/env python3
"""
Decides what the next Spanish episode should be based on progress + SRS schedule.

Outputs a JSON decision:
{
    "type": "new" | "review",
    "lesson_num": N,
    "title": "...",
    "focus": "...",
    "vocabulary": [...],
    "grammar": "...",
    "cultural_tip": "...",
    "review_phrases": [...],   // only for type=review
    "reason": "..."
}

Usage:
    python3 pick_next_episode.py
"""

import json
from datetime import date, datetime
from pathlib import Path

BASE = Path(__file__).parent
PROGRESS  = BASE / "progress.json"
CURRICULUM = BASE / "curriculum.json"

today = date.today()


def load(path):
    with open(path) as f:
        return json.load(f)


def main():
    progress   = load(PROGRESS)
    curriculum = load(CURRICULUM)

    completed  = progress.get("completed_lessons", [])
    intervals  = progress.get("srs_intervals_days", [7, 14, 28])
    next_new   = progress.get("next_new_lesson", 1)

    # Build set of completed lesson numbers
    done_nums = {c["lesson"] for c in completed}

    # Check for overdue reviews (oldest overdue first)
    overdue = []
    for lesson in completed:
        nr = lesson.get("next_review")
        if nr:
            review_date = datetime.strptime(nr, "%Y-%m-%d").date()
            if review_date <= today and lesson.get("review_count", 0) < len(intervals):
                overdue.append((review_date, lesson))

    overdue.sort(key=lambda x: x[0])  # oldest first

    if overdue:
        _, lesson = overdue[0]
        review_count = lesson.get("review_count", 0)
        interval_used = intervals[review_count] if review_count < len(intervals) else intervals[-1]

        # Find original curriculum entry for extra content
        orig = next((c for c in curriculum if c["lesson"] == lesson["lesson"]), {})

        result = {
            "type": "review",
            "lesson_num": lesson["lesson"],
            "title": f"Review — {lesson['title']}",
            "focus": f"Spaced repetition review of lesson {lesson['lesson']}: {lesson['title']}. "
                     f"Recap core phrases, correct common mistakes, then add 8-10 NEW phrases that extend the same topic.",
            "vocabulary": orig.get("vocabulary", []),
            "grammar": orig.get("grammar", "Review of previously covered grammar"),
            "cultural_tip": orig.get("cultural_tip", ""),
            "review_phrases": lesson.get("key_phrases", []),
            "review_count": review_count + 1,
            "next_review_days": intervals[review_count + 1] if review_count + 1 < len(intervals) else None,
            "reason": f"Lesson {lesson['lesson']} was last reviewed {interval_used} days ago (review #{review_count + 1})"
        }
    else:
        # Find next new lesson from curriculum
        available = [c for c in curriculum if c["lesson"] not in done_nums]

        if available:
            next_lesson = sorted(available, key=lambda x: x["lesson"])[0]
            result = {
                "type": "new",
                "lesson_num": next_lesson["lesson"],
                "title": next_lesson["title"],
                "focus": next_lesson["focus"],
                "vocabulary": next_lesson.get("vocabulary", []),
                "grammar": next_lesson.get("grammar", ""),
                "cultural_tip": next_lesson.get("cultural_tip", ""),
                "review_phrases": [],
                "reason": f"Next new lesson in curriculum (lesson {next_lesson['lesson']})"
            }
        else:
            # All lessons done, generate a bonus free-conversation episode
            all_phrases = []
            for c in completed:
                all_phrases.extend(c.get("key_phrases", [])[:3])

            result = {
                "type": "new",
                "lesson_num": max(done_nums) + 1,
                "title": "Free Conversation Practice",
                "focus": "Full roleplay episode — Tobi has a complete conversation in Spanish covering all learned topics: meeting someone, going to a bar, talking about work, weekend plans. No new grammar, pure fluency practice.",
                "vocabulary": ["all previously learned vocabulary"],
                "grammar": "Consolidation of all grammar learned so far",
                "cultural_tip": "How to sound more natural: filler words, pacing, Spanish idioms",
                "review_phrases": all_phrases[:15],
                "reason": "All curriculum lessons completed — free conversation practice"
            }

    print(json.dumps(result, indent=2, ensure_ascii=False))


if __name__ == "__main__":
    main()
