#!/usr/bin/env python3
"""
Friday Generator for Math Curriculum - Review & Challenge
"""
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
from math_helpers import CSS, page_multi, sec, b, bw, bl, BLUE, GREEN, GOLD
from weasyprint import HTML


def generate_friday(week_dir: str, week_num: int, day_data: dict):
    topic = day_data.get("topic", "Friday Review & Challenge")
    activities = day_data.get("activities", [])
    
    sections = []
    for i, activity in enumerate(activities, 1):
        activity_type = activity.get("type", "generic")
        activity_data = activity.get("data", {})
        title = activity_data.get("title", f"Activity {i}")
        section_html = build_activity_section(activity_type, activity_data)
        sections.append((i, title, section_html))
    
    mid = (len(sections) + 1) // 2
    
    page1 = ""
    for i, title, html in sections[:mid]:
        page1 += sec(i, title, html)
    
    page2 = ""
    for i, title, html in sections[mid:]:
        page2 += sec(i, title, html, pb=True)
    
    html_content = page_multi(week_num, "Friday", topic, page1, page2)
    
    pdf_path = os.path.join(week_dir, f"Week_{week_num}_Friday.pdf")
    HTML(string=html_content).write_pdf(pdf_path)
    print(f"[ok] Week {week_num} Friday generated: {pdf_path}")
    
    return day_data.get("answers", [])


def build_activity_section(activity_type: str, data: dict) -> str:
    builders = {
        "tens_ones_chart": build_tens_ones_chart,
        "expanded_form": build_expanded_form,
        "build_from_expanded": build_build_from_expanded,
        "digit_place": build_digit_place,
        "compare": build_compare,
        "word_problems": build_word_problems,
        "challenge": build_challenge,
        "generic": build_generic,
    }
    builder = builders.get(activity_type, build_generic)
    return builder(data)


def build_tens_ones_chart(data: dict) -> str:
    html = '<table class="tbl"><tr><th>Number</th><th>Tens</th><th>Ones</th></tr>'
    for num in data.get("numbers", []):
        html += f'<tr><td>{num}</td><td>{b("4em")}</td><td>{b("4em")}</td></tr>'
    html += '</table>'
    return html


def build_expanded_form(data: dict) -> str:
    html = '<p class="note">' + data.get("note", "Write in expanded form.") + '</p>'
    html += '<div class="mgrid c2">'
    for num in data.get("numbers", []):
        html += f'<div class="abox"><p>{num} = {b("4em")} + {b("4em")}</p></div>'
    html += '</div>'
    return html


def build_build_from_expanded(data: dict) -> str:
    html = '<p class="note">' + data.get("note", "What number does the expanded form make?") + '</p>'
    html += '<div class="mgrid c3">'
    for tens, ones in data.get("pairs", []):
        html += f'<div class="abox" style="text-align:center"><p>{tens} + {ones} = {b("4em")}</p></div>'
    html += '</div>'
    return html


def build_digit_place(data: dict) -> str:
    html = '<p class="note">' + data.get("note", "Which place is the digit in?") + '</p>'
    html += '<div class="mgrid c2">'
    for item in data.get("items", []):
        html += f'<div class="abox"><p>{item}</p></div>'
    html += '</div>'
    return html


def build_compare(data: dict) -> str:
    html = '<p class="note">' + data.get("note", "Write >, <, or =.") + '</p>'
    html += '<div class="mgrid c2">'
    for left, right in data.get("pairs", []):
        html += f'<div class="abox" style="text-align:center"><p>{left} {b("4em")} {right}</p></div>'
    html += '</div>'
    return html


def build_word_problems(data: dict) -> str:
    html = '<div class="wp">'
    for problem in data.get("problems", []):
        text = problem.get("text", "")
        blanks = problem.get("blanks", 1)
        blank_html = " ".join([b("4em") for _ in range(blanks)])
        html += f'<p>{text} {blank_html}</p>'
    html += '</div>'
    return html


def build_challenge(data: dict) -> str:
    html = '<div class="starbox"><p><b>' + data.get("title", "Challenge!") + '</b></p>'
    for problem in data.get("problems", []):
        text = problem.get("text", "")
        blanks = problem.get("blanks", 1)
        blank_html = " ".join([b("4em") for _ in range(blanks)])
        html += f'<p>{text} {blank_html}</p>'
    html += '</div>'
    return html


def build_generic(data: dict) -> str:
    return data.get("html", "")
