#!/usr/bin/env python3
"""
Week 6: Phase 1 Review and Challenge
Phase 1: Number Sense & Operations
"""

import os
from weasyprint import HTML

from math_helpers import (
    CSS, TEACHER_CSS,
    page, page_multi, hdr, sec, b, bw, bl,
    generate_simple,
    tg_page, tg_page_multi, tg_sec, tg_grid_answers, tg_note, tg_section_title,
    BLUE, GREEN, RED, YELLOW, ORANGE, PURPLE, PINK, TEAL, GOLD,
)
from activity_builders import (
    build_subtraction_facts,
    build_addition_facts,
    build_subtraction_word_problems,
    build_fact_families_subtraction,
    build_challenge_box,
    build_compare_numbers,
    build_order_numbers,
    build_write_tens_ones,
    build_read_tens_ones,
)

BASE = os.path.expanduser("~/Home_School/2nd_Grade/Math")
WEEK = os.path.join(BASE, "Week_6")


# ═══════════════════════════════════════════════════
# MONDAY — Number Sense Review
# ═══════════════════════════════════════════════════
def monday():
    # 1: Counting challenge
    s1 = build_challenge_box({
        "problems": [
            {"text": "Fill in the missing numbers."},
            {"text": "<table class='tbl'><tr><th>Count by 5s</th><th>Count by 10s</th></tr>"},
            {"text": "<tr><td>5, 10, " + b("4em") + ", " + b("4em") + ", 25, " + b("4em") + ", " + b("4em") + ", 40</td>"},
            {"text": "<td>10, 20, " + b("4em") + ", " + b("4em") + ", 50, " + b("4em") + ", " + b("4em") + ", 80</td></tr></table>"},
            {"text": "<table class='tbl'><tr><th>Count by 2s</th><th>Count back by 10s</th></tr>"},
            {"text": "<tr><td>2, 4, " + b("4em") + ", " + b("4em") + ", 10, " + b("4em") + ", " + b("4em") + ", 16</td>"},
            {"text": "<td>100, " + b("4em") + ", " + b("4em") + ", 70, " + b("4em") + ", " + b("4em") + ", 30, " + b("4em") + "</td></tr></table>"},
        ]
    })
    
    # 2: Place value
    s2 = build_write_tens_ones({
        "numbers": [47, 83, 62, 95],
        "note": "How many tens and ones?",
        "cols": 2,
    })
    # Add the reverse problems
    s2 += build_read_tens_ones({
        "phrases": ["5 tens and 8 ones", "3 tens and 0 ones"],
        "note": "",
        "cols": 2,
    })
    
    # 3: Compare numbers
    s3 = build_compare_numbers({
        "pairs": [(35, 53), (67, 76), (82, 28), (49, 94), (55, 55), (71, 17)],
        "note": "Write >, <, or =.",
        "cols": 3,
    })
    
    # 4: Order numbers
    s4 = build_order_numbers({
        "sets": [[23, 32, 13, 21], [45, 54, 35, 43], [90, 19, 91, 10]],
        "direction": "least_to_greatest",
        "note": "Write from least to greatest.",
        "cols": 3,
    })
    
    # 5: Even or odd
    s5 = build_challenge_box({
        "problems": [
            {"text": "Circle even or odd."},
            {"text": "24 — even / odd"},
            {"text": "37 — even / odd"},
            {"text": "50 — even / odd"},
            {"text": "63 — even / odd"},
            {"text": "88 — even / odd"},
            {"text": "91 — even / odd"},
        ]
    })
    
    # 6: Number detective
    s6 = build_challenge_box({
        "problems": [
            {"text": "<b>Number Detective</b>"},
            {"text": "☐ Less than 50  ☐ Tens digit is 3  ☐ Ones digit is odd  ☐ Greater than 30"},
            {"text": "My number could be: " + b("4em") + ", " + b("4em") + ", " + b("4em") + ", or " + b("4em")},
        ]
    })
    
    body = f'''{sec(1, "Counting Challenge", s1)}
{sec(2, "Place Value", s2, pb=True)}
{sec(3, "Compare Numbers", s3)}
{sec(4, "Order the Numbers", s4, pb=True)}
{sec(5, "Even or Odd?", s5)}
{sec(6, "Challenge: Number Detective", s6)}'''
    
    return page_multi(5, "Monday", "Number Sense Review", body)


# ═══════════════════════════════════════════════════
# TUESDAY — Addition Facts Review
# ═══════════════════════════════════════════════════
def tuesday():
    # 1: Easy facts
    s1 = build_addition_facts({
        "facts": [(5, 3), (6, 6), (8, 2), (4, 7), (9, 1), (5, 5), (3, 3), (7, 3), (8, 8)],
        "note": "Singles and doubles.",
        "cols": 3,
    })
    
    # 2: Medium facts
    s2 = build_addition_facts({
        "facts": [(7, 6), (8, 5), (9, 4), (6, 8), (9, 5), (7, 8), (8, 7), (6, 9), (5, 9)],
        "note": "",
        "cols": 3,
    })
    
    # 3: Make 10 strategy
    s3 = build_challenge_box({
        "problems": [
            {"text": "Break the second number to make 10."},
            {"text": "8 + 5 = 8 + " + b("4em") + " + " + b("4em") + " = " + b("4em")},
            {"text": "7 + 6 = 7 + " + b("4em") + " + " + b("4em") + " = " + b("4em")},
            {"text": "9 + 4 = 9 + " + b("4em") + " + " + b("4em") + " = " + b("4em")},
            {"text": "6 + 8 = 6 + " + b("4em") + " + " + b("4em") + " = " + b("4em")},
        ]
    })
    
    # 4: Doubles plus 1
    s4 = build_challenge_box({
        "problems": [
            {"text": "Use doubles to help!"},
            {"text": "6 + 7 = (6+6)+1 = " + b("4em")},
            {"text": "5 + 6 = (5+5)+1 = " + b("4em")},
            {"text": "7 + 8 = (7+7)+1 = " + b("4em")},
            {"text": "8 + 9 = (8+8)+1 = " + b("4em")},
            {"text": "4 + 5 = (4+4)+1 = " + b("4em")},
            {"text": "3 + 4 = (3+3)+1 = " + b("4em")},
        ]
    })
    
    # 5: Word problems
    s5 = build_challenge_box({
        "problems": [
            {"text": "Mike has 8 toy cars. Dad gives him 7 more. 8 + 7 = " + b("4em") + " cars"},
            {"text": "14 boys and 9 girls. 14 + 9 = " + b("4em") + " students"},
        ]
    })
    
    # 6: Addition pyramid
    s6 = build_challenge_box({
        "problems": [
            {"text": "<b>Addition Pyramid</b>"},
            {"text": "Add each pair. Write the sum below."},
            {"text": "<div style='text-align:center; font-size:16px;'>7    5    8    4</div>"},
            {"text": "<div style='min-height:60px; border:1px dashed #ccc;'></div>"},
        ]
    })
    
    body = f'''{sec(1, "Easy", s1, pb=True)}
{sec(2, "Medium", s2)}
{sec(3, "Make 10 Strategy", s3, pb=True)}
{sec(4, "Doubles Plus 1", s4)}
{sec(5, "Word Problems", s5, pb=True)}
{sec(6, "Challenge: Addition Pyramid", s6)}'''
    
    return page_multi(5, "Tuesday", "Addition Facts Review", body)


# ═══════════════════════════════════════════════════
# WEDNESDAY — Subtraction Facts Review
# ═══════════════════════════════════════════════════
def wednesday():
    # 1: Easy
    s1 = build_subtraction_facts({
        "facts": [(10, 3), (9, 4), (8, 5), (10, 7), (7, 3), (10, 5), (8, 6), (9, 7), (10, 8)],
        "note": "Easy.",
        "cols": 3,
    })
    
    # 2: Medium
    s2 = build_subtraction_facts({
        "facts": [(14, 6), (13, 5), (15, 7), (12, 4), (16, 8), (11, 3), (15, 9), (14, 7), (13, 6)],
        "note": "",
        "cols": 3,
    })
    
    # 3: Fact families
    s3 = build_fact_families_subtraction({
        "families": [[7, 8, 15], [5, 9, 14], [6, 8, 14], [9, 4, 13]],
        "note": "Complete each fact family.",
        "cols": 2,
    })
    
    # 4: Subtract using addition
    s4 = build_challenge_box({
        "problems": [
            {"text": "Think: ? + subtrahend = minuend."},
            {"text": "15−8: 8+" + b("4em") + "=15 → answer=" + b("4em")},
            {"text": "14−7: 7+" + b("4em") + "=14 → answer=" + b("4em")},
            {"text": "13−6: 6+" + b("4em") + "=13 → answer=" + b("4em")},
            {"text": "17−9: 9+" + b("4em") + "=17 → answer=" + b("4em")},
            {"text": "12−5: 5+" + b("4em") + "=12 → answer=" + b("4em")},
            {"text": "16−8: 8+" + b("4em") + "=16 → answer=" + b("4em")},
        ]
    })
    
    # 5: Word problems
    s5 = build_subtraction_word_problems({
        "problems": [
            {"text": "18 stickers. Gave away 7. 18 − 7 = " + b("4em") + " stickers"},
            {"text": "15 birds. 6 flew away. 15 − 6 = " + b("4em") + " birds"},
        ]
    })
    
    # 6: Subtraction pyramid
    s6 = build_challenge_box({
        "problems": [
            {"text": "<b>Subtraction Pyramid</b>"},
            {"text": "<div style='text-align:center; font-size:16px;'>19    14    16    11</div>"},
            {"text": "<div style='min-height:60px; border:1px dashed #ccc;'></div>"},
        ]
    })
    
    body = f'''{sec(1, "Easy", s1, pb=True)}
{sec(2, "Medium", s2)}
{sec(3, "Fact Families Review", s3, pb=True)}
{sec(4, "Subtract Using Addition", s4)}
{sec(5, "Word Problems", s5, pb=True)}
{sec(6, "Challenge: Subtraction Pyramid", s6)}'''
    
    return page_multi(5, "Wednesday", "Subtraction Facts Review", body)


# ═══════════════════════════════════════════════════
# THURSDAY — Mixed Addition and Subtraction
# ═══════════════════════════════════════════════════
def thursday():
    # 1: Mix it up
    s1 = build_challenge_box({
        "problems": [
            {"text": "Read carefully — add or subtract?"},
            {"text": "8 + 6 = " + b("4em")},
            {"text": "15 − 7 = " + b("4em")},
            {"text": "9 + 5 = " + b("4em")},
            {"text": "14 − 8 = " + b("4em")},
            {"text": "7 + 7 = " + b("4em")},
            {"text": "16 − 9 = " + b("4em")},
            {"text": "8 + 8 = " + b("4em")},
            {"text": "13 − 5 = " + b("4em")},
        ]
    })
    
    # 2: Fill the sign
    s2 = build_challenge_box({
        "problems": [
            {"text": "Write + or − to make each sentence true."},
            {"text": "8 " + b("1.5em") + " 7 = 15"},
            {"text": "16 " + b("1.5em") + " 9 = 7"},
            {"text": "9 " + b("1.5em") + " 5 = 14"},
            {"text": "14 " + b("1.5em") + " 6 = 8"},
            {"text": "6 " + b("1.5em") + " 6 = 12"},
            {"text": "18 " + b("1.5em") + " 7 = 11"},
            {"text": "7 " + b("1.5em") + " 9 = 16"},
            {"text": "20 " + b("1.5em") + " 5 = 15"},
        ]
    })
    
    # 3: Word problem mix
    s3 = build_challenge_box({
        "problems": [
            {"text": "9 pencils. Find 6 more. " + b("4em") + " = " + b("4em")},
            {"text": "17 cookies. Ate 8. " + b("4em") + " = " + b("4em")},
            {"text": "Tom has 5 marbles, Sarah has 8. Together? " + b("4em") + " = " + b("4em")},
        ]
    })
    
    # 4: Find the error
    s4 = build_challenge_box({
        "problems": [
            {"text": "Fix each wrong answer."},
            {"text": "9+6=14 ❌ Fix: " + b("4em")},
            {"text": "15−7=9 ❌ Fix: " + b("4em")},
            {"text": "8+8=15 ❌ Fix: " + b("4em")},
            {"text": "14−6=7 ❌ Fix: " + b("4em")},
            {"text": "7+9=15 ❌ Fix: " + b("4em")},
            {"text": "17−8=10 ❌ Fix: " + b("4em")},
        ]
    })
    
    # 5: Two-step problems
    s5 = build_challenge_box({
        "problems": [
            {"text": "Two-step problems."},
            {"text": "Start at 20. −7, then +5. 20−7=" + b("4em") + ", +5 = " + b("4em")},
            {"text": "Start at 5. +8, then −3. 5+8=" + b("4em") + ", −3 = " + b("4em")},
            {"text": "Start at 15. −6, then +4. 15−6=" + b("4em") + ", +4 = " + b("4em")},
        ]
    })
    
    # 6: Mystery operations
    s6 = build_challenge_box({
        "problems": [
            {"text": "<b>Mystery Operations</b>"},
            {"text": "9 " + b("1.5em") + " 6 = 15"},
            {"text": "16 " + b("1.5em") + " 7 = 9"},
            {"text": "8 " + b("1.5em") + " 5 = 13"},
            {"text": "20 " + b("1.5em") + " 8 = 12"},
            {"text": "7 " + b("1.5em") + " 9 = 16"},
            {"text": "14 " + b("1.5em") + " 5 = 9"},
        ]
    })
    
    body = f'''{sec(1, "Mix It Up!", s1, pb=True)}
{sec(2, "Fill the Sign", s2)}
{sec(3, "Word Problem Mix", s3, pb=True)}
{sec(4, "Find the Error", s4)}
{sec(5, "Two-Step Problems", s5, pb=True)}
{sec(6, "Challenge: Mystery Operations", s6)}'''
    
    return page_multi(5, "Thursday", "Mixed Addition and Subtraction", body)


# ═══════════════════════════════════════════════════
# FRIDAY — Phase 1 Challenge Quest
# ═══════════════════════════════════════════════════
def friday():
    # Level 1: Counting quest
    s1 = build_challenge_box({
        "problems": [
            {"text": "⭐ Level 1: Counting Quest ⭐"},
            {"text": "Count by 10s: 10, 20, " + b("4em") + ", " + b("4em") + ", 50, " + b("4em") + ", " + b("4em") + ", " + b("4em")},
            {"text": "Count by 5s: 5, 10, " + b("4em") + ", 20, " + b("4em") + ", 30"},
        ]
    })
    
    # Level 2: Place value treasure
    s2 = build_challenge_box({
        "problems": [
            {"text": "⭐ Level 2: Place Value Treasure ⭐"},
            {"text": "63 = " + b("4em") + " tens, " + b("4em") + " ones"},
            {"text": "4 tens + 9 ones = " + b("4em")},
            {"text": "80 = " + b("4em") + " tens, " + b("4em") + " ones"},
            {"text": "7 tens + 2 ones = " + b("4em")},
        ]
    })
    
    # Level 3: Addition arena
    s3 = build_addition_facts({
        "facts": [(8, 7), (9, 6), (5, 8), (7, 9), (6, 8), (9, 5), (8, 9), (4, 7), (9, 9)],
        "note": "⭐ Level 3: Addition Arena ⭐",
        "cols": 3,
    })
    
    # Level 4: Subtraction summit
    s4 = build_subtraction_facts({
        "facts": [(15, 7), (14, 6), (18, 9), (13, 5), (17, 8), (20, 6), (16, 8), (19, 7), (12, 4)],
        "note": "⭐ Level 4: Subtraction Summit ⭐",
        "cols": 3,
    })
    
    # Level 5: Word problem woods
    s5 = build_challenge_box({
        "problems": [
            {"text": "⭐ Level 5: Word Problem Woods ⭐"},
            {"text": "12 shells. Give 5 to friend. 12 − 5 = " + b("4em") + " shells"},
            {"text": "8 red + 9 yellow flowers. 8 + 9 = " + b("4em") + " flowers"},
            {"text": "19 pages. Read 7. 19 − 7 = " + b("4em") + " pages"},
        ]
    })
    
    # Star count
    s6 = build_challenge_box({
        "problems": [
            {"text": "⭐ Star Count ⭐"},
            {"text": "<table class='tbl'><tr><td>Level 1:</td><td>Level 2:</td></tr>"},
            {"text": "<tr><td>⭐ " + b("4em") + "</td><td>⭐ " + b("4em") + "</td></tr>"},
            {"text": "<tr><td>Level 3:</td><td>Level 4:</td></tr>"},
            {"text": "<tr><td>⭐ " + b("4em") + "</td><td>⭐ " + b("4em") + "</td></tr>"},
            {"text": "<tr><td>Level 5:</td><td></td></tr>"},
            {"text": "<tr><td>⭐ " + b("4em") + "</td><td></td></tr></table>"},
            {"text": "Total Stars: " + b("4em") + " out of 5"},
            {"text": "5 = Quest Master!  4 = Star Explorer!  3 = Brave Adventurer!  Under 3 = Keep Training!"},
        ]
    })
    
    body = f'''{sec(1, "Level 1: Counting Quest", s1)}
{sec(2, "Level 2: Place Value Treasure", s2)}
{sec(3, "Level 3: Addition Arena", s3)}
{sec(4, "Level 4: Subtraction Summit", s4)}
{sec(5, "Level 5: Word Problem Woods", s5)}
{sec(6, "Star Count", s6)}'''
    
    return page_multi(1, "Friday", "Phase 1 Challenge Quest!", body)


# ═══════════════════════════════════════════════════
# TEACHER GUIDE
# ═══════════════════════════════════════════════════
def monday_tg():
    return tg_page("Monday", "Number Sense Review",
        tg_sec(1, "Counting", ["15,20,30,35 / 30,40,60,70 / 6,8,12,14 / 90,80,60,50,20"]) +
        tg_sec(2, "Place Value", ["4/7, 8/3, 6/2, 9/5 / 58, 30"]) +
        tg_sec(3, "Compare", ["<, <, >, <, =, >"]) +
        tg_sec(4, "Order", ["13,21,23,32 / 35,43,45,54 / 10,19,90,91"]) +
        tg_sec(5, "Even/Odd", ["even, odd, even, odd, even, odd"]) +
        tg_sec(6, "Detective", ["31, 33, 35, 37, 39"])
    )


def tuesday_tg():
    return tg_page("Tuesday", "Addition Facts Review",
        tg_sec(1, "Easy", ["8,12,10,11,10,10,6,10,16"]) +
        tg_sec(2, "Medium", ["13,13,13,14,14,15,15,15,14"]) +
        tg_sec(3, "Make 10", ["2,3,13 / 3,3,13 / 1,3,13 / 4,4,14"]) +
        tg_sec(4, "D+1", ["13,11,15,17,9,7"]) +
        tg_sec(5, "WPs", ["15, 23"]) +
        tg_sec(6, "Pyramid", ["12, 13, 12 → 25, 25 → 50"])
    )


def wednesday_tg():
    return tg_page("Wednesday", "Subtraction Facts Review",
        tg_sec(1, "Easy", ["7,5,3,3,4,5,2,2,2"]) +
        tg_sec(2, "Medium", ["8,8,8,8,8,8,6,7,7"]) +
        tg_sec(3, "Fact Families", ["15,7 / 14,9 / 14,8 / 13,9"]) +
        tg_sec(4, "Addition Help", ["7,7 / 7,7 / 7,7 / 8,8 / 7,7 / 8,8"]) +
        tg_sec(5, "WPs", ["11, 9"]) +
        tg_sec(6, "Pyramid", ["5, 2, 5 → 7, 7 → 14"])
    )


def thursday_tg():
    return tg_page("Thursday", "Mixed Addition and Subtraction",
        tg_sec(1, "Mix", ["14, 8, 14, 6, 14, 7, 16, 8"]) +
        tg_sec(2, "Signs", ["+, −, +, −, +, −, +, −"]) +
        tg_sec(3, "WPs", ["9+6=15, 17−8=9, 5+8=13"]) +
        tg_sec(4, "Fix", ["15, 8, 16, 8, 16, 9"]) +
        tg_sec(5, "Two-Step", ["13, 18 / 13, 10 / 9, 13"]) +
        tg_sec(6, "Mystery", ["+, −, +, −, +, −"])
    )


def friday_tg():
    return tg_page("Friday", "Phase 1 Challenge Quest!",
        tg_sec(1, "Counting", ["30,40,60,70,80 / 15,25"]) +
        tg_sec(2, "Place Value", ["6/3, 49, 8/0, 72"]) +
        tg_sec(3, "Addition", ["15,15,13,16,14,14,17,11,18"]) +
        tg_sec(4, "Subtraction", ["8,8,9,8,9,14,8,12,8"]) +
        tg_sec(5, "Word Problems", ["7, 17, 12"])
    )


def main():
    import glob
    for f in glob.glob(os.path.join(WEEK, "*.pdf")):
        os.remove(f)
    
    days = [
        ("Monday", "Number Sense Review", monday, monday_tg),
        ("Tuesday", "Addition Facts Review", tuesday, tuesday_tg),
        ("Wednesday", "Subtraction Facts Review", wednesday, wednesday_tg),
        ("Thursday", "Mixed Addition Subtraction", thursday, thursday_tg),
        ("Friday", "Phase 1 Challenge Quest", friday, friday_tg),
    ]
    generate_simple(WEEK, days)
    
    print("Week 6 generated: 10 PDFs")


if __name__ == "__main__":
    main()
