# -*- coding: utf-8 -*-
"""Extra lessons (not in the book) – marked «درس إضافي»: consignes, alphabet complet, nombres, couleurs, animaux, famille et école."""
import random
from . import words as WD
from .unit2 import act, fl, match, pick, lesson, mcq, speak

CONSIGNES = [("cocher", "أضع علامة ✓", "☑️"), ("compléter", "أُكمل", "✍️"), ("écouter / entendre", "أستمع", "👂"), ("écrire / rédiger", "أكتب", "✏️"),
             ("entourer", "أحوّط (أرسم دائرة)", "⭕"), ("lire", "أقرأ", "📖"), ("parler / répéter", "أتكلم / أكرّر", "🗣️"), ("relier", "أصل", "🔗"),
             ("répondre", "أجيب", "💬"), ("souligner", "أضع خطاً تحت", "〰️"), ("colorier", "أُلوّن", "🖍️"), ("barrer", "أشطب", "❌")]


def consignes_lesson():
    lid = "x-consignes"
    cs = [dict(kind="word", text=f, ar=a, emoji=e, img=None, tts=f) for f, a, e in CONSIGNES]
    rng = random.Random(lid)
    qs = []
    for f, a, e in CONSIGNES[:8]:
        others = rng.sample([x[1] for x in CONSIGNES if x[0] != f], 2)
        ch = [a] + others
        rng.shuffle(ch)
        qs.append((f"« {f} » veut dire :", ch, a, dict(ar="ماذا تعني هذه التعليمة؟")))
    return lesson(lid, "Extra", "Les consignes du livre", "تعليمات الكتاب", "📋", [
        act(lid + "-cards", "flashcards", "Les consignes et les symboles", "التعليمات والرموز", "J'écoute chaque consigne.", "استمع لكل تعليمة واعرف معناها.", 10, dict(cards=cs)),
        mcq(lid + "-quiz", "Je comprends les consignes", "أفهم التعليمات", qs),
        match(lid + "-match", [(f, e) for f, a, e in CONSIGNES[:8]], "Je relie la consigne et son symbole", "أصل التعليمة برمزها"),
    ], "extra", True)


def alphabet_lesson():
    lid = "x-alphabet"
    rng = random.Random(lid)
    letters = list("abcdefghijklmnopqrstuvwxyz")
    cs = [dict(kind="letter", upper=l.upper(), lower=l, tts=l, text=f"{l.upper()} {l}", ar=f"الحرف {l.upper()}") for l in letters]
    items = []
    for l in rng.sample(letters, 10):
        ch = [l] + rng.sample([x for x in letters if x != l], 3)
        rng.shuffle(ch)
        items.append(dict(tts=l, answer=l, choices=ch))
    return lesson(lid, "Extra", "L'alphabet complet A → Z", "الأبجدية كاملة من A إلى Z", "🔡", [
        act(lid + "-cards", "flashcards", "Je chante l'alphabet", "أغنّي الأبجدية", "J'écoute et je répète toutes les lettres.", "استمع وكرّر كل الحروف بالترتيب.", 10, dict(cards=cs)),
        act(lid + "-listen", "listen_choose", "J'écoute et je trouve la lettre", "أستمع وأجد الحرف", "J'écoute la lettre et je la choisis.", "استمع إلى الحرف واختره.", 20, dict(items=items)),
        act(lid + "-order", "word_order", "Je remets l'alphabet dans l'ordre", "أرتّب الحروف", "Je touche les lettres dans l'ordre de l'alphabet.", "المس الحروف بترتيب الأبجدية.", 20,
            dict(items=[dict(words=rng.sample(list(s), len(s)), answer=" ".join(s)) for s in ["abcdef", "ghijkl", "mnopqr", "stuvwx", "yz"]])),
        act(lid + "-hunt", "letter_hunt", "Je touche toutes les voyelles", "ألمس كل الحروف المتحركة", "a e i o u y sont les voyelles.", "الحروف المتحركة هي a e i o u y. المسها كلها.", 20,
            dict(target="aeiouy", grid=[list(r) for r in ["aknoe", "tiryb", "uvhaw", "ozexu", "ydqip"]])),
    ], "extra", True)


def nombres_lesson():
    lid = "x-nombres"
    rng = random.Random(lid)
    keys = [k for k, _, _ in WD.NUMBERS]
    cs = []
    for k in keys:
        c = WD.card(k)
        c.update(kind="word", tts=c["text"], big=str(WD.W[k]["number"]))
        cs.append(c)
    items = []
    for k in rng.sample(keys, 8):
        n = WD.W[k]["number"]
        ch = [str(n)] + [str(x) for x in rng.sample([i for i in range(11) if i != n], 3)]
        rng.shuffle(ch)
        items.append(dict(tts=WD.W[k]["fr"], answer=str(n), choices=ch))
    return lesson(lid, "Extra", "Les nombres de 0 à 10", "الأرقام من 0 إلى 10", "🔢", [
        act(lid + "-cards", "flashcards", "Je compte de 0 à 10", "أعدّ من 0 إلى 10", "J'écoute et je répète.", "استمع وكرّر كل رقم.", 10, dict(cards=cs)),
        act(lid + "-listen", "listen_choose", "J'écoute et je trouve le nombre", "أستمع وأجد الرقم", "J'écoute et je choisis le chiffre.", "استمع إلى الرقم واختره.", 20, dict(items=items)),
        match(lid + "-match", [(WD.W[k]["fr"], str(WD.W[k]["number"])) for k in keys[:8]], "Je relie le mot et le chiffre", "أصل الكلمة بالرقم"),
        act(lid + "-spell", "spell", "J'écris les nombres", "أكتب الأرقام", "Je mets les lettres dans l'ordre.", "رتّب الحروف لتكتب الرقم.", 20,
            dict(items=[dict(WD.card(k, False), tts=WD.W[k]["fr"]) for k in ["deux", "trois", "cinq", "sept", "huit_n", "zero"]])),
        act(lid + "-memory", "memory", "Mémory des nombres", "ذاكرة الأرقام", "Je retrouve les paires.", "ابحث عن كل رقم وكلمته.", 15,
            dict(pairs=[dict(WD.card(k), emoji=WD.NUM_EMOJI[WD.W[k]["number"]]) for k in keys[1:7]])),
    ], "extra", True)


def couleurs_lesson():
    lid = "x-couleurs"
    rng = random.Random(lid)
    keys = [k for k, *_ in WD.COLORS]
    cs = []
    for k in keys:
        c = WD.card(k)
        c.update(kind="word", tts=c["text"], color=WD.W[k]["color"])
        cs.append(c)
    items = []
    for k in rng.sample(keys, 8):
        ch = [k] + rng.sample([x for x in keys if x != k], 3)
        rng.shuffle(ch)
        items.append(dict(tts=WD.W[k]["fr"], answer=k, choices=ch, choice_colors={x: WD.W[x]["color"] for x in ch}))
    return lesson(lid, "Extra", "Les couleurs", "الألوان", "🎨", [
        act(lid + "-cards", "flashcards", "J'écoute les couleurs", "أستمع إلى الألوان", "J'écoute et je répète.", "استمع وكرّر اسم كل لون.", 10, dict(cards=cs)),
        act(lid + "-listen", "listen_choose", "J'écoute et je touche la couleur", "أستمع وألمس اللون", "J'écoute et je choisis la couleur.", "استمع إلى اللون والمسه.", 20, dict(items=items)),
        match(lid + "-match", [(WD.W[k]["fr"], WD.W[k]["emoji"]) for k in keys[:8]], "Je relie le mot et la couleur", "أصل الكلمة باللون"),
        act(lid + "-spell", "spell", "J'écris les couleurs", "أكتب الألوان", "Je mets les lettres dans l'ordre.", "رتّب الحروف.", 20,
            dict(items=[dict(WD.card(k, False), tts=WD.W[k]["fr"]) for k in ["rouge", "vert", "bleu", "noir", "jaune"]])),
    ], "extra", True)


def animaux_lesson():
    lid = "x-animaux"
    keys = [k for k, *_ in WD.ANIMALS] + ["chat", "souris", "zebre", "coq"]
    rng = random.Random(lid)
    return lesson(lid, "Extra", "Les animaux", "الحيوانات", "🦁", [
        fl(lid + "-cards", keys),
        pick(lid + "-ferme", "Je touche les animaux de la ferme", "ألمس حيوانات المزرعة",
             [("vache", True), ("mouton", True), ("cheval", True), ("coq", True), ("lion", False), ("crocodile", False), ("elephant", False), ("ours", False)],
             "Je touche les animaux de la ferme.", "المس الحيوانات التي تعيش في المزرعة."),
        match(lid + "-match", rng.sample(keys, 8)),
        act(lid + "-memory", "memory", "Mémory des animaux", "ذاكرة الحيوانات", "Je retrouve les paires.", "ابحث عن كل حيوان وكلمته.", 15, dict(pairs=[WD.card(k) for k in rng.sample(keys, 6)])),
        act(lid + "-spell", "spell", "J'écris les animaux", "أكتب أسماء الحيوانات", "Je mets les lettres dans l'ordre.", "رتّب الحروف.", 20,
            dict(items=[dict(WD.card(k, False), tts=WD.label(k)) for k in ["chat", "chien", "lapin", "lion", "ours", "vache"]])),
        mcq(lid + "-genre", "Un ou une ?", "مذكّر أم مؤنث؟", [(WD.W[k]["fr"], ["Un", "Une"], WD.W[k]["art"], dict(ar="اختر الأداة الصحيحة", emoji=WD.W[k]["emoji"])) for k in ["chat", "souris", "vache", "lapin", "chien", "lion"]]),
    ], "extra", True)


def famille_lesson():
    lid = "x-famille"
    fam = ["papa", "maman", "grand_pere", "grand_mere", "frere", "soeur", "bebe", "famille"]
    sch = ["ecole", "classe", "eleve", "maitresse", "cartable", "cahier", "stylo", "gomme_s", "regle_s", "tableau"]
    rng = random.Random(lid)
    return lesson(lid, "Extra", "Ma famille et mon école", "عائلتي ومدرستي", "👨‍👩‍👧", [
        fl(lid + "-fam", fam, "Ma famille", "عائلتي"),
        fl(lid + "-school", sch, "Mon école", "مدرستي"),
        match(lid + "-match1", fam),
        match(lid + "-match2", rng.sample(sch, 8)),
        act(lid + "-sort", "sort", "Je range : la famille ou l'école ?", "أصنّف: العائلة أم المدرسة؟", "Je mets chaque mot dans la bonne boite.", "ضع كل كلمة في الصندوق المناسب.", 20,
            dict(bins=[dict(id="fam", label="La famille", ar="العائلة", emoji="👨‍👩‍👧"), dict(id="sch", label="L'école", ar="المدرسة", emoji="🏫")],
                 items=[dict(WD.card(k), bin="fam") for k in fam[:6]] + [dict(WD.card(k), bin="sch") for k in sch[:6]])),
        speak(lid + "-speak", "Je présente ma famille", "أُقدّم عائلتي", [("C'est mon papa.", "هذا بابا.", "c'est mon papa"), ("C'est ma maman.", "هذه ماما.", "c'est ma maman"),
                                                                     ("C'est ma maitresse.", "هذه معلّمتي.", "c'est ma maitresse")]),
    ], "extra", True)


def build():
    return dict(id="x", title="Leçons supplémentaires", title_ar="دروس إضافية", color="#26a69a", icon="🧩",
                desc_ar="دروس إضافية خارج الكتاب لتقوية المفردات والنطق (موسومة: درس إضافي).", desc_fr="Des leçons en plus, hors du livre, pour plus de mots et une meilleure prononciation.",
                lessons=[consignes_lesson(), alphabet_lesson(), nombres_lesson(), couleurs_lesson(), animaux_lesson(), famille_lesson()])
