# -*- coding: utf-8 -*-
"""Mission Conjugaison — «Exercices de Conjugaison 4» (SABIS). Exercises and answers follow the book and its «Corrigés»
(OCR slips in the answer key were corrected)."""
from .kit import table, fill, rewrite, identify, speed, match, choose, hunt, rules, lesson, act, sort

AVOIR = [("avoir", "présent", "ai as a avons avez ont"), ("avoir", "futur simple", "aurai auras aura aurons aurez auront"),
         ("avoir", "imparfait", "avais avais avait avions aviez avaient"), ("avoir", "passé composé", "ai eu / as eu / a eu / avons eu / avez eu / ont eu"),
         ("avoir", "plus-que-parfait", "avais eu / avais eu / avait eu / avions eu / aviez eu / avaient eu"),
         ("avoir", "conditionnel présent", "aurais aurais aurait aurions auriez auraient"), ("avoir", "impératif présent", "aie ayons ayez")]
ETRE = [("être", "présent", "suis es est sommes êtes sont"), ("être", "futur simple", "serai seras sera serons serez seront"),
        ("être", "imparfait", "étais étais était étions étiez étaient"), ("être", "passé composé", "ai été / as été / a été / avons été / avez été / ont été"),
        ("être", "plus-que-parfait", "avais été / avais été / avait été / avions été / aviez été / avaient été"),
        ("être", "conditionnel présent", "serais serais serait serions seriez seraient"), ("être", "impératif présent", "sois soyons soyez")]
V = lambda lst, *ts: [x for x in lst if x[1] in ts]

VALEURS = ["habitude", "vérité générale", "action qui se passe au moment où l'on parle", "action qui va avoir lieu dans le futur", "ordre",
           "description", "action complètement achevée dans le passé", "action qui s'est prolongée dans le passé",
           "quelque chose qui peut se passer si les conditions le permettent", "imparfait de narration",
           "action inachevée dans le passé", "demande atténuée", "supposition avec si"]

CLOSE = [{"quelque chose qui peut se passer si les conditions le permettent", "supposition avec si"},
         {"action inachevée dans le passé", "action qui s'est prolongée dans le passé", "imparfait de narration"}]


def valeur(lid, n, items, title="À quoi sert ce temps ?", title_ar="ما دلالة الزمن؟"):
    """items: [(sentence with the verb filled in, verb, valeur)] -> choose the meaning of the tense."""
    import random
    rng = random.Random(f"{lid}-{n}")
    qs = []
    for s, v, val in items:
        twins = next((g for g in CLOSE if val in g), {val})   # never offer two near-synonyms
        ch = [val] + rng.sample([x for x in VALEURS if x not in twins], 2)
        rng.shuffle(ch)
        qs.append((f"{s}  →  « {v} »", ch, val, "لماذا استُعمل هذا الزمن هنا؟"))
    return choose(lid, n, qs, title, title_ar)


def rappel():
    lid = "l4-cj01"
    cards = [
        ("Le présent : ce qui se passe maintenant, une habitude, une vérité générale. — Elle nage tous les jours.", "المضارع: ما يحدث الآن، أو عادة، أو حقيقة عامة.", "⏺️"),
        ("Le futur simple : une action à venir, un ordre atténué, un conseil. — Il reviendra demain.", "المستقبل البسيط: حدث قادم، أو أمر لطيف، أو نصيحة.", "⏭️"),
        ("L'imparfait : une description, une habitude passée, une action en train de se faire. — La ville était calme.", "الماضي الناقص: وصف، أو عادة في الماضي، أو حدث كان مستمراً.", "🌫️"),
        ("Le passé composé : une action complètement achevée. — À l'examen, j'ai obtenu 16/20.", "الماضي المركّب: حدث انتهى تماماً في الماضي.", "✅"),
        ("Le plus-que-parfait : un fait passé avant un autre fait passé. — Quand il avait fait du sport, il se sentait plein d'énergie.", "الماضي الأسبق: حدث وقع قبل حدث آخر في الماضي.", "⏮️"),
        ("Le conditionnel présent : la politesse, ce qui pourrait arriver. — Je voudrais un peu de sucre, s'il vous plaît.", "الشرطي: للتهذيب، أو لما يمكن أن يحدث إذا توفرت الشروط.", "🤔"),
        ("L'impératif : un ordre, un conseil, une prière (tu, nous, vous). — Assieds-toi et fais tes devoirs.", "الأمر: لإعطاء أمر أو نصيحة، مع tu وnous وvous فقط.", "📢"),
        ("Les temps composés utilisent les auxiliaires être et avoir : passé composé, plus-que-parfait.", "الأزمنة المركّبة تُبنى بفعلَي être وavoir المساعدين.", "🧩"),
    ]
    qs = [("Elle nage tous les jours. → ce présent exprime…", ["une habitude", "un ordre", "une description"], "une habitude", "ماذا يفيد المضارع هنا؟"),
          ("Les quatre angles d'un carré sont droits. → présent de…", ["vérité générale", "politesse", "regret"], "vérité générale"),
          ("Je voudrais un peu de sucre, s'il vous plaît. → c'est…", ["le conditionnel présent", "le futur simple", "l'imparfait"], "le conditionnel présent"),
          ("Sa maison était grande et belle. → l'imparfait exprime…", ["une description", "un ordre", "une action future"], "une description"),
          ("Il reviendra demain. → le futur simple exprime…", ["une action qui va avoir lieu", "une habitude passée", "un regret"], "une action qui va avoir lieu"),
          ("Assieds-toi, s'il te plaît. → c'est…", ["l'impératif", "le présent", "le conditionnel"], "l'impératif"),
          ("Quand il avait fait du sport, il se sentait bien. → « avait fait » est au…", ["plus-que-parfait", "passé composé", "imparfait"], "plus-que-parfait"),
          ("Quels temps sont composés ?", ["passé composé et plus-que-parfait", "présent et futur", "imparfait et conditionnel"], "passé composé et plus-que-parfait")]
    return lesson(lid, "Rappel", "Rappel : la valeur des modes et des temps", "مراجعة: دلالات الأزمنة", "🧭",
                  [rules(lid, 1, cards, "Les temps et leur valeur", "الأزمنة ودلالاتها"), choose(lid, 2, qs, "Je reconnais la valeur", "أتعرّف دلالة الزمن")])


def ae_present():
    lid = "l4-cj02"
    idt = [("Nous avons des tickets pour le match de ce soir.", "avons", "présent"), ("Ayez le courage de lui dire la vérité.", "Ayez", "impératif présent"),
           ("Il sera en voyage ce jour-là.", "sera", "futur simple"), ("Elles ont une idée du travail à faire.", "ont", "présent"),
           ("Papa n'aura pas le temps de dîner avec nous.", "aura", "futur simple"), ("Sois serviable, Pierre !", "Sois", "impératif présent"),
           ("Tu es content de tes résultats.", "es", "présent"), ("Soyons heureux.", "Soyons", "impératif présent"),
           ("Êtes-vous certains de pouvoir courir le marathon ?", "Êtes", "présent"), ("Aie pitié de lui.", "Aie", "impératif présent")]
    ex2 = ["La raison du plus fort (présent) ___ toujours la meilleure. = est", "Notre projet (futur simple) ___ le plus applaudi. = sera",
           "(Impératif présent – 2e pers. plur.) ___ sérieux en travaillant. = Soyez", "Nous (présent) ___ le temps d'aller au centre commercial. = avons",
           "(Présent) ___-tu envie de préparer le diner ? = As", "(Impératif – 2e pers. sing.) ___ gentille avec ta sœur, s'il te plaît. = Sois",
           "Ils (futur simple) ___ contents d'apprendre la nouvelle. = seront", "Est-ce qu'elles (présent) ___ de jolies robes ? = ont",
           "Je (présent) ___ en retard. = suis", "Il (futur simple) ___ là dans 10 minutes. = sera"]
    ex3 = [("Il est très doué pour la musique.", "Il sera très doué pour la musique."), ("Nous sommes bien éduqués.", "Nous serons bien éduqués."),
           ("Tu as de beaux cheveux.", "Tu auras de beaux cheveux."), ("Je suis en route vers l'aéroport.", "Je serai en route vers l'aéroport."),
           ("Elle a un examen à passer.", "Elle aura un examen à passer."), ("Les ours polaires sont en voie de disparition.", "Les ours polaires seront en voie de disparition."),
           ("Vous avez du travail à faire.", "Vous aurez du travail à faire."), ("Tu n'as pas le temps de nous rendre visite.", "Tu n'auras pas le temps de nous rendre visite.")]
    ex4 = ["Vous ___ l'habitude de courir chaque matin. = avez", "Nous ___ prêts dans quelques minutes. = serons",
           "Les trois côtés d'un triangle équilatéral ___ égaux. = sont", "À partir de lundi prochain, je ___ en congé. = serai",
           "___ confiance en vous. = Ayez", "___-t-il besoin d'aide maintenant ? = A", "Caroline ___ déjà là depuis 14 heures. = est",
           "___ aimable avec tes cousins. = Sois", "Le navire ___ au port demain matin. = sera", "Vous ___ sûrement plus de chance la fois prochaine. = aurez"]
    val = [("Vous avez l'habitude de courir chaque matin.", "avez", "habitude"), ("Les trois côtés d'un triangle équilatéral sont égaux.", "sont", "vérité générale"),
           ("Nous serons prêts dans quelques minutes.", "serons", "action qui va avoir lieu dans le futur"), ("Ayez confiance en vous.", "Ayez", "ordre"),
           ("A-t-il besoin d'aide maintenant ?", "A", "action qui se passe au moment où l'on parle"), ("Sois aimable avec tes cousins.", "Sois", "ordre")]
    return lesson(lid, "Avoir · Être 1", "Avoir et être : présent, futur simple, impératif", "avoir وêtre: المضارع والمستقبل والأمر", "1️⃣", [
        table(lid, 1, V(AVOIR, "présent", "futur simple", "impératif présent") + V(ETRE, "présent", "futur simple", "impératif présent")),
        identify(lid, 2, idt), fill(lid, 3, ex2, "Je complète au temps demandé", "أُكمل بالزمن المطلوب"),
        rewrite(lid, 4, "Transforme les phrases au futur simple.", "حوّل الجمل إلى المستقبل البسيط.", ex3),
        fill(lid, 5, ex4, "Le bon temps", "الزمن المناسب", "Je complète avec avoir ou être au temps qui convient.", "أكمل بـ avoir أو être بالزمن المناسب للمعنى."),
        valeur(lid, 6, val), speed(lid, 7, idt)])


def ae_imparfait_pc():
    lid = "l4-cj03"
    rel = [("Mes grands-parents", "étaient en Égypte."), ("Tu", "as eu mal au ventre."), ("Elle", "avait la rougeole."), ("Ton père et toi", "aviez raison."),
           ("Mes amies", "ont été absentes."), ("J'", "ai eu 17/20 à l'examen de français."), ("Le professeur", "était en train de nous expliquer la leçon."),
           ("Irène et moi", "étions à la plage.")]
    ex2 = ["Molière (imparfait) ___ 51 ans lorsqu'il mourut. = avait", "La maison de ma tante (imparfait) ___ grande et belle. = était",
           "Julie (passé composé) ___ 9 ans la semaine dernière. = a eu", "Vous (passé composé) ___ nombreux à participer au spectacle. = avez été",
           "Nous (imparfait) ___ censés partir en vacances. = étions", "J' (passé composé) ___ obligé de lui présenter des excuses. = ai été",
           "La France et la Grande-Bretagne (imparfait) ___ partenaires dans un projet culturel. = étaient", "J' (passé composé) ___ peur sur les montagnes russes. = ai eu",
           "L'année dernière, Marie et moi (passé composé) ___ l'occasion de visiter Londres. = avons eu", "L'accident (passé composé) ___ lieu hier soir. = a eu"]
    pc = [("Le professeur est négligent.", "Le professeur a été négligent."), ("Ta présentation était très intéressante.", "Ta présentation a été très intéressante."),
          ("Nous étions voisins pendant 10 ans.", "Nous avons été voisins pendant 10 ans."), ("Elle aura mal à la tête.", "Elle a eu mal à la tête."),
          ("Annie est l'une de mes meilleures amies.", "Annie a été l'une de mes meilleures amies."), ("Marc a la chair de poule.", "Marc a eu la chair de poule.")]
    imp = [("Elle a eu de très beaux cadeaux.", "Elle avait de très beaux cadeaux."), ("C'est une aventure inoubliable !", "C'était une aventure inoubliable !"),
           ("Vous êtes à temps pour le diner.", "Vous étiez à temps pour le diner."), ("Mon amie a les cheveux rouges.", "Mon amie avait les cheveux rouges."),
           ("Ma mère est une femme très affectueuse.", "Ma mère était une femme très affectueuse."), ("J'ai eu un travail de dernière minute.", "J'avais un travail de dernière minute.")]
    idt = [("La maison de ma tante était grande.", "était", "imparfait"), ("Julie a eu 9 ans.", "a eu", "passé composé"), ("Nous étions censés partir.", "étions", "imparfait"),
           ("Vous avez été nombreux.", "avez été", "passé composé"), ("Molière avait 51 ans.", "avait", "imparfait"), ("L'accident a eu lieu hier.", "a eu", "passé composé"),
           ("J'ai été obligé de m'excuser.", "ai été", "passé composé"), ("Ils étaient partenaires.", "étaient", "imparfait")]
    return lesson(lid, "Avoir · Être 2", "Avoir et être : imparfait et passé composé", "avoir وêtre: الماضي الناقص والمركّب", "2️⃣", [
        table(lid, 1, V(AVOIR, "imparfait", "passé composé") + V(ETRE, "imparfait", "passé composé")), match(lid, 2, rel),
        fill(lid, 3, ex2, "Je complète au temps demandé", "أُكمل بالزمن المطلوب"),
        rewrite(lid, 4, "Transforme les phrases au passé composé.", "حوّل الجمل إلى الماضي المركّب.", pc, "Au passé composé", "إلى الماضي المركّب"),
        rewrite(lid, 5, "Transforme les phrases à l'imparfait.", "حوّل الجمل إلى الماضي الناقص.", imp, "À l'imparfait", "إلى الماضي الناقص"),
        speed(lid, 6, idt)])


PERS = ["1re pers. sing.", "2e pers. sing.", "3e pers. sing.", "1re pers. plur.", "2e pers. plur.", "3e pers. plur."]


def person_quiz(lid, n, items, title="Quelle personne ?", title_ar="أي ضمير؟"):
    import random
    rng = random.Random(f"{lid}-{n}")
    qs = []
    for s, v, p in items:
        ch = [p] + rng.sample([x for x in PERS if x != p], 3)
        rng.shuffle(ch)
        qs.append((f"{s}  →  « {v} »", ch, p, "مع أي ضمير صُرّف الفعل؟"))
    return choose(lid, n, qs, title, title_ar)


def ae_pqp():
    lid = "l4-cj04"
    per = [("Ce restaurant avait été le seul à offrir des pizzas.", "avait été", "3e pers. sing."), ("Tu avais eu peur au moment de l'accident.", "avais eu", "2e pers. sing."),
           ("Si seulement elles avaient été plus attentives.", "avaient été", "3e pers. plur."), ("J'avais eu un mauvais rêve la semaine dernière.", "avais eu", "1re pers. sing."),
           ("Nous avions eu une discussion intéressante.", "avions eu", "1re pers. plur."), ("Vous aviez été très sages durant votre enfance.", "aviez été", "2e pers. plur.")]
    ex2 = ["J' (avoir) ___ beaucoup de chance de ne pas rater mon avion. = avais eu", "Nous (avoir) ___ la preuve de son innocence. = avions eu",
           "Vous (être) ___ satisfaits de leurs résultats scolaires. = aviez été", "Il ne comprenait pas pourquoi nous (être) ___ contrariés. = avions été",
           "Tu (être) ___ très heureuse de la revoir. = avais été", "Cette enfant (être) ___ gâtée par sa famille. = avait été",
           "Les joueurs (ne pas être) ___ à la hauteur de leur réputation. = n'avaient pas été", "Ils (être) ___ ravis d'assister à ce spectacle. = avaient été"]
    ex3 = ["La jeune fille ___ la vedette du spectacle scolaire. = avait été", "Les enfants ___ du plaisir à décorer la salle. = avaient eu",
           "Éric ___ étudiant en médecine. = avait été", "Nous ___ tant de questions à lui poser. = avions eu", "On ___ beaucoup de témoignages de sympathie. = avait eu",
           "Vous ___ une peur bleue à cause des bruits étranges. = aviez eu", "Il ___ accusé à tort. = avait été"]
    ex4 = [("Tu es élu président du club.", "Tu avais été élu président du club."), ("Elle est fière de son mari.", "Elle avait été fière de son mari."),
           ("Elle avait peur de lui dire la vérité.", "Elle avait eu peur de lui dire la vérité."), ("Roland est en avance pour la réunion.", "Roland avait été en avance pour la réunion."),
           ("Vous aviez des doutes sur son innocence.", "Vous aviez eu des doutes sur son innocence."), ("Je suis content de mon progrès.", "J'avais été content de mon progrès.")]
    rec = [("Le dimanche, nous avions l'habitude de déjeuner ensemble.", "avions", "imparfait"), ("Sa maison n'était qu'une vieille cabane en bois.", "était", "imparfait"),
           ("Durant ta scolarité, tu avais souvent eu des punitions.", "avais eu", "plus-que-parfait"), ("J'avais été tellement émue ce jour-là.", "avais été", "plus-que-parfait"),
           ("Cela faisait des années que nous n'avions plus eu de ses nouvelles.", "avions eu", "plus-que-parfait"), ("Quand vous êtes sortis, vous n'aviez pas vos clés.", "aviez", "imparfait")]
    return lesson(lid, "Avoir · Être 3", "Avoir et être : le plus-que-parfait", "avoir وêtre: الماضي الأسبق", "3️⃣", [
        table(lid, 1, V(AVOIR, "plus-que-parfait") + V(ETRE, "plus-que-parfait")), person_quiz(lid, 2, per),
        fill(lid, 3, ex2, "Je conjugue au plus-que-parfait", "أصرّف في الماضي الأسبق", "Je conjugue le verbe entre parenthèses au plus-que-parfait.", "صرّف الفعل بين القوسين في الماضي الأسبق."),
        fill(lid, 4, ex3, "Avoir ou être ?", "avoir أم être؟", "Je complète avec avoir ou être au plus-que-parfait.", "أكمل بـ avoir أو être في الماضي الأسبق."),
        rewrite(lid, 5, "Transforme les phrases au plus-que-parfait.", "حوّل الجمل إلى الماضي الأسبق.", ex4), identify(lid, 6, rec, "Récapitulatif", "مراجعة")])


def ae_conditionnel():
    lid = "l4-cj05"
    coche = [("Tu seras en classe le jour de notre arrivée.", False), ("Nous aurions la chance de sortir s'il ne pleuvait pas.", True),
             ("Les élèves étaient en vacances en été.", False), ("Si le plan ne marchait pas, on aurait des regrets.", True),
             ("Vous seriez déçus si vous appreniez le nom du gagnant.", True), ("Marguerite et son frère seront les héros de la pièce.", False),
             ("Je vous serais très reconnaissante si vous m'aidiez.", True), ("Nicolas avait de nouveaux amis.", False)]
    ch = [("Je ___ en mesure d'aller en Italie si j'obtenais mon visa à temps.", ["serais", "sera", "étais", "sois"], "serais"),
          ("Marie ___ une bonne note si elle étudiait.", ["aurait", "aura", "avait", "serait"], "aurait"),
          ("Tu ___ une galette gratuite si tu achetais pour 50 euros.", ["aurais", "serais", "aura", "est"], "aurais"),
          ("Si la chance nous souriait, nous ___ le droit de sortir.", ["aurions", "avons", "serions", "avions"], "aurions"),
          ("Si vous changiez de place, vous ___ plus à l'aise.", ["seriez", "serez", "êtes", "auriez"], "seriez"),
          ("___-vous un stylo à me prêter, s'il vous plaît ?", ["Auriez", "Seriez", "Serez", "Aviez"], "Auriez"),
          ("Si je présentais mon travail aujourd'hui, j' ___ une récompense.", ["aurais", "serai", "aurai", "ai"], "aurais"),
          ("Il ___ gentil avec toi si tu lui parlais poliment.", ["serait", "aurait", "est", "avait"], "serait")]
    ex3 = ["Il n' ___ pas beaucoup de supporteurs. = aurait", "Tu n' ___ pas de chocolat si tu ne terminais pas ton assiette. = aurais",
           "Cette actrice ___ l'une des préférées du public. = serait", "Je ___ ravi de les revoir. = serais", "Les touristes ___ très satisfaits s'ils visitaient la ville. = seraient",
           "Julie et moi ___ peut-être en retard pour le spectacle. = serions", "Vous ___ heureux d'avoir de leurs nouvelles. = seriez"]
    ex4 = [("Avez-vous de quoi manger ce soir, monsieur ?", "Auriez-vous de quoi manger ce soir, monsieur ?"),
           ("Ce voyage était l'aventure de ses rêves.", "Ce voyage serait l'aventure de ses rêves."), ("Cet artiste est très connu dans le monde entier.", "Cet artiste serait très connu dans le monde entier."),
           ("Tu as été un bon élément en classe.", "Tu serais un bon élément en classe."), ("Elle a eu la plus haute note.", "Elle aurait la plus haute note.")]
    oui = "Oui, conditionnel présent"
    return lesson(lid, "Avoir · Être 4", "Avoir et être : le conditionnel présent", "avoir وêtre: الشرطي الحاضر", "4️⃣", [
        rules(lid, 1, [("Conditionnel présent = radical du futur + terminaisons de l'imparfait. — aur- + -ais : j'aurais ; ser- + -ais : je serais", "الشرطي = جذر المستقبل + نهايات الماضي الناقص.", "🧩")]),
        table(lid, 2, V(AVOIR, "conditionnel présent") + V(ETRE, "conditionnel présent")),
        choose(lid, 3, [(s, [oui, "Non"], oui if ok else "Non", "هل الفعل في الشرطي الحاضر؟") for s, ok in coche], "Conditionnel ou pas ?", "شرطي أم لا؟"),
        choose(lid, 4, ch), fill(lid, 5, ex3, "Au conditionnel présent", "في الشرطي الحاضر", "Je complète avec avoir ou être au conditionnel présent.", "أكمل بـ avoir أو être في الشرطي الحاضر."),
        rewrite(lid, 6, "Transforme les phrases au conditionnel présent.", "حوّل الجمل إلى الشرطي الحاضر.", ex4)])


def ae_bilan():
    lid = "l4-cj06"
    rel = [("Ce livre éducatif", "est très intéressant."), ("Nous", "étions en route pour Lisbonne à bord d'un bateau."),
           ("Cette ville ancienne", "avait été un centre administratif autrefois."), ("Vous", "aviez eu du mal à vous endormir."),
           ("Demain, ils", "auront un examen sur l'histoire de la Grèce."), ("Je", "serai en Angleterre le mois prochain."),
           ("Si nous parlions anglais,", "nous aurions moins de mal à vous comprendre."), ("Chers amis,", "ayons du style.")]
    ex2 = ["Athènes ___ la capitale de la Grèce. = est", "Autrefois, chaque cité ___ ses propres lois. = avait",
           "L'histoire est l'ensemble des événements qui ___ lieu dans le monde. = ont eu", "Quand j' ___ petit, l'actualité ne m'intéressait pas. = étais",
           "Tu ___ beaucoup de mal à communiquer si tu n'habitais pas ici. = aurais", "Nous ___ ravis de lui parler si nous le pouvions. = serions",
           "___ confiants ! Cette attitude vous ___ nécessaire demain. = Soyez | sera", "___ confiance en toi ! Tout se passera bien. = Aie"]
    ch = [("___ un casque pour nos promenades en cyclomoteur.", ["Ayons", "Ayez", "Aie", "Soyons"], "Ayons"),
          ("Auguste ___ assez intelligent pour ne pas s'impliquer.", ["a été", "as été", "a eu", "as eu"], "a été"),
          ("Nous ___ des couronnes pour jouer aux rois.", ["avons", "sommes", "avez", "êtes"], "avons"),
          ("J' ___ 13 ans quand j'ai commencé ma carrière d'actrice.", ["avais", "avait", "étais", "êtes"], "avais"),
          ("___-vous des bougies ? Le courant est coupé.", ["Auriez", "Seriez", "Étiez", "Aviez"], "Auriez"),
          ("Ces penseurs ___ très influents à leur époque.", ["étaient", "avaient", "seront", "étions"], "étaient"),
          ("Mireille et Liliane ___ à présenter demain un exposé.", ["auront", "seront", "serons", "aurons"], "auront"),
          ("Tu ___ tellement étourdi que tu te blesses !", ["es", "as", "a", "est"], "es")]
    ex4 = ["Demain, j' (futur simple) ___ le plaisir de vous faire visiter un site ancien. = aurai", "(Impératif – 2e pers. plur.) ___ attentifs ! = Soyez",
           "Hier, Julien (passé composé) ___ du mal à suivre les explications. = a eu", "Nous (plus-que-parfait) ___ heureux de découvrir la mer Méditerranée. = avions été",
           "L'Europe (présent) ___ un relief très varié. = a", "(Impératif – 2e pers. sing.) ___ du respect envers ceux qui t'entourent ! = Aie",
           "La petite Julie (passé composé) ___ surprise d'apprendre la nouvelle. = a été", "Quand il était jeune, mon grand-père (imparfait) ___ une voiture de sport. = avait",
           "S'ils économisaient, dans 6 mois, ils en (conditionnel présent) ___ assez pour partir. = auraient"]
    mix = [("nous serons", "serons", "futur simple"), ("vous aviez été", "aviez été", "plus-que-parfait"), ("ils auraient", "auraient", "conditionnel présent"),
           ("tu as eu", "as eu", "passé composé"), ("j'étais", "étais", "imparfait"), ("soyons !", "soyons", "impératif présent"), ("elle a", "a", "présent"),
           ("nous aurions", "aurions", "conditionnel présent"), ("ils ont été", "ont été", "passé composé"), ("vous aurez", "aurez", "futur simple"),
           ("tu avais", "avais", "imparfait"), ("j'avais eu", "avais eu", "plus-que-parfait"), ("aie !", "aie", "impératif présent"), ("ils sont", "sont", "présent")]
    return lesson(lid, "Bilan 1", "Bilan : avoir et être à tous les temps", "مراجعة: avoir وêtre في كل الأزمنة", "🏁", [
        match(lid, 1, rel), fill(lid, 2, ex2, "Le temps qui convient", "الزمن المناسب", "Je complète avec avoir ou être au temps qui convient.", "اختر الزمن المناسب للمعنى."),
        choose(lid, 3, ch), fill(lid, 4, ex4, "Au temps demandé", "بالزمن المطلوب"),
        speed(lid, 5, [(s, v, t) for s, v, t in mix], "Défi final : avoir et être", "التحدّي النهائي: avoir وêtre", 60, 12)], kind="bilan")


def g1_present():
    lid = "l4-cj07"
    verbs = [("chanter", "présent", "chante chantes chante chantons chantez chantent"), ("chanter", "futur simple", "chanterai chanteras chantera chanterons chanterez chanteront"),
             ("chanter", "impératif présent", "chante chantons chantez"), ("avancer", "présent", "avance avances avance avançons avancez avancent"),
             ("appeler", "présent", "appelle appelles appelle appelons appelez appellent"), ("envoyer", "futur simple", "enverrai enverras enverra enverrons enverrez enverront"),
             ("essuyer", "présent", "essuie essuies essuie essuyons essuyez essuient")]
    cards = [("Présent du 1er groupe : radical + e, es, e, ons, ez, ent. — je chante, nous chantons", "المضارع للمجموعة الأولى: الجذر + e, es, e, ons, ez, ent", "🎵"),
             ("Futur simple : infinitif + ai, as, a, ons, ez, ont. — je chanterai", "المستقبل البسيط: المصدر كاملاً + ai, as, a, ons, ez, ont", "⏭️"),
             ("-cer → ç devant o : nous avançons ; -ger → ge devant o : nous rangeons", "الأفعال المنتهية بـ -cer تأخذ ç، و-ger تأخذ ge قبل o", "⚠️"),
             ("-oyer / -uyer → i devant e muet : j'envoie, j'essuie ; futur : j'enverrai", "-oyer و-uyer: يتحول y إلى i قبل e الصامتة", "⚠️"),
             ("-eler / -eter → on double la consonne : j'appelle, je jette (mais nous appelons)", "-eler و-eter: يتضاعف الحرف: j'appelle, je jette", "⚠️"),
             ("Comme céder et semer : je cède, je sème (accent grave devant e muet)", "مثل céder وsemer: يتحول é أو e إلى è قبل e الصامتة", "⚠️")]
    idt = [("Vous me cassez les oreilles !", "cassez", "présent"), ("Ne hurlez pas comme ça !", "hurlez", "impératif présent"),
           ("La mer reflète la couleur du ciel.", "reflète", "présent"), ("La fusée décollera demain matin.", "décollera", "futur simple"),
           ("Cet incendie ravagera la Californie.", "ravagera", "futur simple"), ("Découpons le soleil sur un carton.", "Découpons", "impératif présent"),
           ("Nous visiterons la grotte de Lascaux.", "visiterons", "futur simple"), ("Perce de petits trous au sommet des œufs.", "Perce", "impératif présent"),
           ("Je déteste les histoires tristes.", "déteste", "présent"), ("Je plongerai dans la mer des Caraïbes.", "plongerai", "futur simple")]
    ex2 = ["Dès que nous serons arrivés, nous t'(envoyer – futur simple) ___ un texto. = enverrons", "Les enfants (préférer – futur simple) ___ aller à la mer. = préféreront",
           "Bon voyage ! (Saluer – impératif, vous) ___ vos parents pour nous. = Saluez", "Les baleines (passer – présent) ___ l'hiver dans les mers chaudes. = passent",
           "Je t'(appeler – futur simple) ___ dès que la voiture sera réparée. = appellerai", "Magalie et moi (participer – présent) ___ à une activité culturelle. = participons",
           "Ton ami et toi (skier – présent) ___ chaque année à Tignes. = skiez", "(Ne pas rester – impératif, tu) ___ trop longtemps au soleil. = Ne reste pas",
           "(Trier – impératif, nous) ___ les ordures. = Trions", "Pendant le sommeil, on (respirer – présent) ___ plus lentement. = respire"]
    rel = [("Cette personne lui causera un sérieux problème.", "futur simple"), ("Ne raccroche pas !", "impératif présent"), ("Je quitte définitivement la France.", "présent"),
           ("Ces fortes précipitations causeront des dégâts.", "futur simple"), ("Six heures séparent Paris de New York.", "présent"), ("Je travaillerai 24 heures sur 24.", "futur simple"),
           ("Prolongeons notre séjour de quelques jours.", "impératif présent"), ("Nous aidons les plus démunis.", "présent")]
    ex4 = ["Quand j'irai en Espagne, je (manger) ___ une paella. = mangerai", "Louise et Béatrice, (ne pas toucher) ___ ce champignon ! = ne touchez pas",
           "Pourquoi ne (demander) ___-tu pas maintenant à ton frère de t'aider ? = demandes", "Le renard (habiter) ___ dans un terrier. = habite",
           "Pierre fera la vaisselle et vous deux, vous l'(essuyer) ___. = essuierez", "(Gonfler) ___ un ballon et remplissons-le d'eau. = Gonflons",
           "Tous les weekends, les habitants (décorer) ___ la place du village. = décorent", "Demain matin, le facteur (distribuer) ___ les lettres. = distribuera"]
    val = [("Le renard habite dans un terrier.", "habite", "vérité générale"), ("Tous les weekends, les habitants décorent la place.", "décorent", "habitude"),
           ("Louise, ne touchez pas ce champignon !", "ne touchez pas", "ordre"), ("Demain, le facteur distribuera les lettres.", "distribuera", "action qui va avoir lieu dans le futur")]
    T3 = ["présent", "futur simple", "impératif présent"]
    return lesson(lid, "1er groupe 1", "1er groupe : présent, futur simple, impératif", "المجموعة الأولى: المضارع والمستقبل والأمر", "🔵", [
        rules(lid, 1, cards, "Les terminaisons et les pièges", "النهايات والحالات الخاصة"), table(lid, 2, verbs), identify(lid, 3, idt),
        fill(lid, 4, ex2, "Au temps demandé", "بالزمن المطلوب"), choose(lid, 5, [(s, T3, t, "ما زمن الفعل؟") for s, t in rel], "Je relie au bon temps", "أربط بالزمن الصحيح"),
        fill(lid, 6, ex4, "Le temps qui convient", "الزمن المناسب"), valeur(lid, 7, val), speed(lid, 8, idt)])


def g1_imparfait_pc():
    lid = "l4-cj08"
    verbs = [("chanter", "imparfait", "chantais chantais chantait chantions chantiez chantaient"),
             ("chanter", "passé composé", "ai chanté / as chanté / a chanté / avons chanté / avez chanté / ont chanté"),
             ("arriver", "passé composé", "suis arrivé(e) / es arrivé(e) / est arrivé(e) / sommes arrivé(e)s / êtes arrivé(e)s / sont arrivé(e)s"),
             ("se promener", "passé composé", "me suis promené(e) / t'es promené(e) / s'est promené(e) / nous sommes promené(e)s / vous êtes promené(e)s / se sont promené(e)s")]
    cards = [("Imparfait : radical + ais, ais, ait, ions, iez, aient. — je chantais, nous chantions", "الماضي الناقص: الجذر + ais, ais, ait, ions, iez, aient", "🌫️"),
             ("Passé composé : avoir au présent + participe passé en -é. — j'ai chanté", "الماضي المركّب: avoir في المضارع + اسم المفعول المنتهي بـ é", "✅"),
             ("Rester, entrer, arriver, monter, passer… et les verbes pronominaux se conjuguent avec être. — Je suis resté(e).", "أفعال الحركة والحالة والأفعال الانعكاسية تُصرَّف مع être", "🚶"),
             ("Avec être, le participe s'accorde avec le sujet. — Les voleurs sont entrés par la cuisine.", "مع être يتطابق اسم المفعول مع الفاعل في الجنس والعدد", "🔗")]
    per = [("Nous avons visité le musée de la ville.", "avons visité", "passé composé"), ("Tu te piquais les doigts.", "te piquais", "imparfait"),
           ("Le technicien a contrôlé la qualité de l'eau.", "a contrôlé", "passé composé"), ("Vous skiiez avec les débutants.", "skiiez", "imparfait"),
           ("Mes grands-parents ont élevé des poules.", "ont élevé", "passé composé"), ("La vieille maison s'est écroulée.", "s'est écroulée", "passé composé"),
           ("Les poteaux défiguraient le paysage.", "défiguraient", "imparfait"), ("J'ai démonté le boîtier de ma lampe.", "ai démonté", "passé composé"),
           ("Une palissade entourait le hangar.", "entourait", "imparfait")]
    rel = [("Tu", "soulignais tous les passages importants."), ("Les musiciens", "ont accordé leurs instruments avant le concert."), ("À 6 ans, vous", "mesuriez 1 m 20."),
           ("Lucie", "ne tardait jamais à répondre aux questions."), ("Je", "suis retourné dans mon pays natal."), ("Pierre et moi", "avons confectionné une corbeille.")]
    ex3 = ["L'orage (briser – passé composé) ___ des branches d'arbres. = a brisé",
           "Tu (ne pas écouter – imparfait) ___ le guide et tu (s'aventurer – imparfait) ___ toujours trop loin. = n'écoutais pas | t'aventurais",
           "Ce voyage, vous en (rêver – imparfait) ___ depuis si longtemps ! = rêviez", "À cause de moi, les assiettes (se casser – passé composé) ___ en mille morceaux. = se sont cassées",
           "Je ne viendrai pas parce que j' (attraper – passé composé) ___ un rhume. = ai attrapé", "Champollion (déchiffrer – passé composé) ___ les hiéroglyphes en 1822. = a déchiffré",
           "Omar ne (respecter – imparfait) ___ pas les règles mais il le (regretter – imparfait) ___ toujours. = respectait | regrettait",
           "L'arbitre (sanctionner – passé composé) ___ la faute. L'équipe adverse (bénéficier – passé composé) ___ d'un coup franc. = a sanctionné | a bénéficié",
           "Tu (répéter – imparfait) ___ inlassablement ton rôle. = répétais"]
    ex4 = ["Selon le récit, ces personnages (posséder) ___ de grands châteaux. = possédaient",
           "Toutes les semaines, un conteur nous (raconter) ___ des histoires. = racontait",
           "Martin et Kevin (longer) ___ le quai quand une pluie fine (commencer) ___ à tomber. = longeaient | a commencé",
           "Ce roi (accéder) ___ au pouvoir en 1545. = a accédé", "Autrefois, les artisans (graver) ___ des signes sur des tablettes d'argile. = gravaient"]
    hu = [("Les voleurs sont *entré* par la cuisine.", "entrés", "مع être يتطابق اسم المفعول مع الفاعل: les voleurs جمع مذكر"),
          ("Elles se sont *lavé* avant de dîner.", "lavées", "الفعل الانعكاسي: الضمير se هو المفعول المباشر وهو مؤنث جمع"),
          ("Nous *avons* restés à la maison.", "sommes", "rester يُصرَّف مع être في الماضي المركّب"),
          ("Hier, tu *chantait* très bien.", "chantais", "مع tu تكون نهاية الماضي الناقص ais")]
    return lesson(lid, "1er groupe 2", "1er groupe : imparfait et passé composé", "المجموعة الأولى: الماضي الناقص والمركّب", "🔵", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), identify(lid, 3, per), match(lid, 4, rel),
        fill(lid, 5, ex3, "Au temps demandé", "بالزمن المطلوب"),
        fill(lid, 6, ex4, "Imparfait ou passé composé ?", "ناقص أم مركّب؟", "Je choisis : imparfait ou passé composé.", "اختر بين الماضي الناقص (وصف/عادة) والمركّب (حدث انتهى)."),
        hunt(lid, 7, hu), speed(lid, 8, per)])


def g1_pqp():
    lid = "l4-cj09"
    verbs = [("chanter", "plus-que-parfait", "avais chanté / avais chanté / avait chanté / avions chanté / aviez chanté / avaient chanté"),
             ("rester", "plus-que-parfait", "étais resté(e) / étais resté(e) / était resté(e) / étions resté(e)s / étiez resté(e)s / étaient resté(e)s")]
    cards = [("Plus-que-parfait : avoir à l'imparfait + participe passé. — J'avais chanté.", "الماضي الأسبق: avoir في الماضي الناقص + اسم المفعول", "⏪"),
             ("Il raconte une action passée qui a eu lieu AVANT une autre action passée.", "يحكي حدثاً ماضياً وقع قبل حدث ماضٍ آخر", "🧭"),
             ("Rester, entrer, arriver, monter… et les pronominaux : être à l'imparfait. — Nous étions monté(e)s.", "أفعال الحركة والانعكاسية: être في الماضي الناقص", "🚶"),
             ("Pronominal + COD après le verbe : pas d'accord. — Elles s'étaient lavées. / Elles s'étaient lavé les mains.", "إذا جاء المفعول المباشر بعد الفعل الانعكاسي لا يتطابق اسم المفعول", "🧼")]
    inf = [("Le responsable avait signé le document avant la réunion. → infinitif ?", ["signer", "signé", "signait", "signir"], "signer"),
           ("Cet avion avait transporté 525 passagers vers Singapour. → infinitif ?", ["transporter", "transporté", "transportir", "porter"], "transporter"),
           ("Des commerçants s'étaient intéressés à cette région. → infinitif ?", ["s'intéresser", "intéressé", "être", "s'étaient"], "s'intéresser"),
           ("J'avais coupé du bois pour l'hiver. → infinitif ?", ["couper", "avoir", "coupé", "coupir"], "couper"),
           ("Cet artiste avait passé son enfance dans une grande ville. → infinitif ?", ["passer", "avoir", "passé", "passir"], "passer"),
           ("On avait enterré le trésor à l'abri des regards. → infinitif ?", ["enterrer", "terre", "enterré", "avoir"], "enterrer")]
    ex2 = ["Ils (parler) ___ le niçois dans l'ancien comté de Nice. = avaient parlé",
           "Je (se garder) ___ de faire un commentaire malgré ma colère. = m'étais gardé ; m'étais gardée",
           "Lors de la pêche, vous (chercher) ___ des étoiles de mer, sans succès. = aviez cherché",
           "Les ouvriers (tapisser) ___ les murs avec du papier peint bleu. = avaient tapissé",
           "Ce responsable (fonder) ___ une association culturelle en 2002. = avait fondé",
           "Elles (se diriger) ___ vers la lumière avant de s'effondrer. = s'étaient dirigées",
           "Hier, nous (provoquer) ___ la colère du professeur en chahutant. = avions provoqué",
           "Alex (s'exprimer) ___ courageusement pour proposer des améliorations. = s'était exprimé"]
    ex3 = ["Nous (pousser) ___ un cri d'effroi en apercevant l'ours. = avions poussé",
           "Pour le dîner, elle nous (préparer) ___ de délicieuses lasagnes. = avait préparé",
           "Paul et ses amis (indiquer) ___ le chemin au touriste et (se lier) ___ d'amitié avec lui. = avaient indiqué | s'étaient liés",
           "Janice et toi (s'agripper) ___ à la rampe pour ne pas tomber. = vous étiez agrippés ; vous étiez agrippées ; vous étiez agrippé(e)s",
           "Cet ingénieur (inventer) ___ et (fabriquer) ___ une nouvelle machine. = avait inventé | avait fabriqué",
           "J' (habiter) ___ au Québec avant de m'installer en Ontario. = avais habité",
           "Nous (rester) ___ dormir chez nos grands-parents. = étions restés ; étions restées ; étions resté(e)s"]
    aux = [("Nous ___ restés dormir chez nos grands-parents.", ["étions", "avions", "sommes", "avons"], "étions"),
           ("Elle nous ___ préparé de délicieuses lasagnes.", ["avait", "était", "a", "avais"], "avait"),
           ("Elles s'___ dirigées vers la lumière.", ["étaient", "avaient", "était", "sont"], "étaient"),
           ("Tu ___ célébré ta réussite avec ta famille.", ["avais", "étais", "avait", "as"], "avais"),
           ("Les deux sœurs ___ baigné dans un milieu artistique.", ["avaient", "étaient", "avait", "ont"], "avaient")]
    hu = [("Elles s'étaient *lavées* les mains.", "lavé", "المفعول المباشر les mains جاء بعد الفعل، فلا تطابق"),
          ("Nous *avions* restés à la maison.", "étions", "rester يُصرَّف مع être"),
          ("Les oiseaux s'étaient *envolé* très haut.", "envolés", "مع être يتطابق مع الفاعل: les oiseaux جمع مذكر"),
          ("Tu *avait* coupé du bois.", "avais", "مع tu: avais")]
    mix = [("j'avais coupé", "avais coupé", "plus-que-parfait"), ("nous chantions", "chantions", "imparfait"), ("ils ont signé", "ont signé", "passé composé"),
           ("elles s'étaient dirigées", "s'étaient dirigées", "plus-que-parfait"), ("tu restais", "restais", "imparfait"), ("vous êtes entrés", "êtes entrés", "passé composé"),
           ("on avait enterré", "avait enterré", "plus-que-parfait"), ("je préparais", "préparais", "imparfait"), ("il avait fondé", "avait fondé", "plus-que-parfait"),
           ("nous sommes arrivés", "sommes arrivés", "passé composé")]
    return lesson(lid, "1er groupe 3", "1er groupe : le plus-que-parfait", "المجموعة الأولى: الماضي الأسبق", "⏪", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), choose(lid, 3, inf, "Quel est l'infinitif ?", "ما المصدر؟"),
        choose(lid, 4, aux, "Avoir ou être ?", "avoir أم être؟"),
        fill(lid, 5, ex2, "Au plus-que-parfait", "بالماضي الأسبق"), fill(lid, 6, ex3, "Au plus-que-parfait (2)", "بالماضي الأسبق (2)"),
        hunt(lid, 7, hu), speed(lid, 8, mix)])


def g1_conditionnel():
    lid = "l4-cj10"
    verbs = [("chanter", "conditionnel présent", "chanterais chanterais chanterait chanterions chanteriez chanteraient"),
             ("acheter", "conditionnel présent", "achèterais achèterais achèterait achèterions achèteriez achèteraient"),
             ("appeler", "conditionnel présent", "appellerais appellerais appellerait appellerions appelleriez appelleraient")]
    cards = [("Conditionnel présent : infinitif + ais, ais, ait, ions, iez, aient. — je chanterais", "الشرطي: المصدر كاملاً + نهايات الماضي الناقص", "🤔"),
             ("Futur : je chanterai. Conditionnel : je chanterais (avec un s).", "انتبه: المستقبل ai بلا s، والشرطي ais بحرف s", "⚠️"),
             ("Si + imparfait → conditionnel. — Si j'avais un permis, j'achèterais une voiture.", "إذا + الماضي الناقص ← جواب الشرط بالشرطي", "🔀"),
             ("Il exprime aussi un souhait poli. — Je souhaiterais revoir mes amis.", "ويُستعمل للتمني والطلب المهذّب", "🙏")]
    grid = [("Tu clouerais", "clouerais", "conditionnel présent"), ("Vous vérifiez", "vérifiez", "présent"), ("Nous allongions", "allongions", "imparfait"),
            ("Vous risqueriez", "risqueriez", "conditionnel présent"), ("Je classais", "classais", "imparfait"), ("On roulera", "roulera", "futur simple"),
            ("Tu déchargerais", "déchargerais", "conditionnel présent"), ("Je surveille", "surveille", "présent"), ("Ils ont visité", "ont visité", "passé composé"),
            ("Je cultiverais", "cultiverais", "conditionnel présent"), ("On soignait", "soignait", "imparfait"), ("Ils céderaient", "céderaient", "conditionnel présent"),
            ("Ils voyageront", "voyageront", "futur simple"), ("Tu rongeras", "rongeras", "futur simple"), ("Je bercerais", "bercerais", "conditionnel présent"),
            ("Vous réconforteriez", "réconforteriez", "conditionnel présent"), ("Nous continuons", "continuons", "présent"), ("Tu changerais", "changerais", "conditionnel présent")]
    rw = [("La baleine bleue adulte pèse autant que 20 éléphants adultes.", "La baleine bleue adulte pèserait autant que 20 éléphants adultes."),
          ("Je souhaite revoir mes amis d'enfance.", "Je souhaiterais revoir mes amis d'enfance."),
          ("Que pensez-vous d'une excursion aux Cèdres ?", "Que penseriez-vous d'une excursion aux Cèdres ?"),
          ("Comptes-tu partir habiter à l'étranger ?", "Compterais-tu partir habiter à l'étranger ?"),
          ("L'air de la montagne purifiera ses poumons.", "L'air de la montagne purifierait ses poumons."),
          ("Préfères-tu voyager en train ou en voiture ?", "Préférerais-tu voyager en train ou en voiture ?"),
          ("Oserez-vous faire un saut à l'élastique ?", "Oseriez-vous faire un saut à l'élastique ?")]
    hu = [("Si tu le souhaitais, nous t'*aidons* à préparer la réception.", "aiderions", "إذا + ناقص ← الجواب بالشرطي"),
          ("*Accepterait*-tu que je parte seule en vacances ?", "Accepterais", "مع tu تكون النهاية ais"),
          ("Si l'examen avait lieu aujourd'hui, je le *passeraient*.", "passerais", "مع je تكون النهاية ais"),
          ("Si papa apprenait cette nouvelle, il se *fâchera*.", "fâcherait", "إذا + ناقص ← شرطي لا مستقبل"),
          ("Si vous alliez en Thaïlande, vous *mangerais* des plats locaux.", "mangeriez", "مع vous تكون النهاية iez"),
          ("Si j'étais sélectionnée, je m'*entraînerai* davantage.", "entraînerais", "الشرطي ais وليس المستقبل ai"),
          ("*Participeraient*-tu à la pièce de théâtre ?", "Participerais", "مع tu تكون النهاية ais"),
          ("Si nous allions au pôle Nord, nous *gèlerait*.", "gèlerions", "مع nous تكون النهاية ions")]
    ex4 = ["Avec un peu d'effort, tu (réaliser) ___ tes rêves. = réaliserais",
           "Si le temps le permettait, mon amie et moi (se promener) ___ sur la digue. = nous promènerions",
           "Le chat (miauler) ___ s'il entendait du bruit. = miaulerait", "Nous savions que vous (arriver) ___ en retard. = arriveriez",
           "Si Maxime se fatiguait beaucoup, il (s'allonger) ___. = s'allongerait", "J' (acheter) ___ une voiture si j'avais mon permis. = achèterais",
           "S'il pleuvait, vous (rester) ___ à la maison. = resteriez", "Si j'en avais l'occasion, je (monter) ___ sur le dos d'un chameau. = monterais"]
    return lesson(lid, "1er groupe 4", "1er groupe : le conditionnel présent", "المجموعة الأولى: الشرطي", "🤔", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), identify(lid, 3, grid[:10], "Conditionnel ou pas ?", "شرطي أم لا؟"),
        rewrite(lid, 4, "Je mets la phrase au conditionnel présent.", "حوّل الجملة إلى الشرطي.", rw),
        hunt(lid, 5, hu), fill(lid, 6, ex4, "Au conditionnel présent", "بالشرطي"),
        speed(lid, 7, grid, "Défi chrono : futur ou conditionnel ?", "تحدّي السرعة: مستقبل أم شرطي؟", 60, 12)])


def g1_bilan():
    lid = "l4-cj11"
    tab = [("Je représenterai", "représenterai", "futur simple"), ("Nous disposons", "disposons", "présent"), ("Ils rencontreront", "rencontreront", "futur simple"),
           ("Cause !", "Cause", "impératif présent"), ("Il appelait", "appelait", "imparfait"), ("Elle a augmenté", "a augmenté", "passé composé"),
           ("On avait étudié", "avait étudié", "plus-que-parfait"), ("Vous vous êtes occupés", "vous êtes occupés", "passé composé"),
           ("Elles avaient daté", "avaient daté", "plus-que-parfait"), ("Vous partageriez", "partageriez", "conditionnel présent")]
    ex2 = ["Vous (ne pas manquer – présent) ___ d'idées pour la fête. = ne manquez pas",
           "J' (exposer – futur simple) ___ mon point de vue. = exposerai",
           "(Étudier – impératif, tu) ___ bien pour réussir ton année ! = Étudie",
           "Paul et moi (retrouver – passé composé) ___ le chaton caché sous la commode. = avons retrouvé",
           "Tu (appeler – plus-que-parfait) ___ ton frère avant de lui rendre visite. = avais appelé",
           "Si j'étais directeur, je (nommer – conditionnel) ___ une personne compétente. = nommerais",
           "Les oiseaux (s'envoler – plus-que-parfait) ___ très haut dans le ciel. = s'étaient envolés",
           "La petite fille (jeter – passé composé) ___ la figurine qui (se casser – passé composé) ___ en mille morceaux. = a jeté | s'est cassée",
           "Les policiers (démanteler – passé composé) ___ un réseau qui (opérer – imparfait) ___ depuis un an. = ont démantelé | opérait",
           "Tu (feuilleter – imparfait) ___ ton magazine quand on (frapper – passé composé) ___ à la porte. = feuilletais | a frappé"]
    ch = [("Si j'avais de l'argent, je ___ un château.", ["possède", "possédais", "posséderais"], "posséderais"),
          ("Te souviens-tu ? Tu ___ une symphonie à 12 ans.", ["avais composée", "avais composé", "avait composé"], "avais composé"),
          ("Ils ___ leur coffre dans leur village natal.", ["ont enterrée", "ont enterré", "ont enterrés"], "ont enterré"),
          ("Moissac est une commune qui ___ dans le Tarn-et-Garonne.", ["se situera", "se situe", "s'est située"], "se situe"),
          ("Quand il sera grand, le petit garçon ___ contre les méchants.", ["luttera", "lutterait", "luttait"], "luttera"),
          ("___ à bien votre projet collectif, s'il vous plaît !", ["Meniez", "Mène", "Menez"], "Menez"),
          ("Il prétendait qu'on ___ la leçon dans deux heures.", ["commence", "commencerait", "commencera"], "commencerait"),
          ("Nous ___ les informations contenues dans l'énigme.", ["décodent", "décodons", "a décodé"], "décodons")]
    rw = [("J'étais arrivée en retard à la conférence.", "Nous étions arrivées en retard à la conférence."),
          ("Vous étudiez la peinture à l'académie des beaux-arts.", "Tu étudies la peinture à l'académie des beaux-arts."),
          ("Ces pays utiliseront ce modèle d'avion.", "Ce pays utilisera ce modèle d'avion."),
          ("Vite ! Montez cette colline rapidement !", "Vite ! Monte cette colline rapidement !"),
          ("Elle travaillait comme serveuse.", "Elles travaillaient comme serveuses."),
          ("Vous avez décidé d'adopter ce chat.", "Tu as décidé d'adopter ce chat.")]
    mix = tab + [("nous chanterions", "chanterions", "conditionnel présent"), ("vous chanterez", "chanterez", "futur simple"),
                 ("j'étais resté", "étais resté", "plus-que-parfait"), ("tu essuies", "essuies", "présent")]
    return lesson(lid, "Bilan 2", "Bilan : les verbes du 1er groupe", "مراجعة: أفعال المجموعة الأولى", "🏁", [
        identify(lid, 1, tab, "Quel temps ?", "ما الزمن؟"), fill(lid, 2, ex2, "Au temps demandé", "بالزمن المطلوب"),
        choose(lid, 3, ch, "Le verbe bien conjugué", "الفعل المصرَّف صحيحاً"),
        rewrite(lid, 4, "Je mets le sujet au singulier ou au pluriel et je fais les changements.", "حوّل الفاعل إلى المفرد أو الجمع وغيّر ما يلزم.", rw, "Singulier ou pluriel", "مفرد أم جمع"),
        speed(lid, 5, mix, "Défi final : le 1er groupe", "التحدّي النهائي: المجموعة الأولى", 60, 12)], kind="bilan")


def g2_present():
    lid = "l4-cj12"
    verbs = [("finir", "présent", "finis finis finit finissons finissez finissent"), ("finir", "futur simple", "finirai finiras finira finirons finirez finiront"),
             ("finir", "impératif présent", "finis finissons finissez"), ("choisir", "présent", "choisis choisis choisit choisissons choisissez choisissent")]
    cards = [("2e groupe : verbes en -ir qui font -issons avec nous. — finir → nous finissons", "المجموعة الثانية: أفعال تنتهي بـ ir ومع nous تصبح issons", "🌱"),
             ("Présent : is, is, it, issons, issez, issent. — je finis, ils finissent", "المضارع: is, is, it, issons, issez, issent", "🎯"),
             ("Futur simple : infinitif + ai, as, a, ons, ez, ont. — je finirai", "المستقبل: المصدر + ai, as, a, ons, ez, ont", "⏭️"),
             ("Impératif : finis, finissons, finissez !", "الأمر: finis, finissons, finissez", "📣")]
    rel = [("Il y a plusieurs années, une loi importante", "améliora l'organisation des lieux publics."), ("S'il te plaît,", "finis tes devoirs avant d'aller jouer."),
           ("Ne t'en fais pas, je", "choisirai un mot de passe très compliqué."), ("La voisine est là ! Vite,", "déguerpissons avant qu'elle ne nous voie !"),
           ("Demain, vous", "enfouirez ce trésor dans le jardin du château."), ("Les lentilles d'eau sont des plantes à fleurs,", "mais elles ne fleurissent presque jamais."),
           ("À force de nous goinfrer, nous", "grossirons de deux kilos d'ici la fin du mois."), ("Des éclairs", "jaillissent dans le ciel noir.")]
    rw = [("En fin de compte, il aboutira au même résultat.", "En fin de compte, ils aboutiront au même résultat."),
          ("Je m'investis de tout cœur dans ce projet.", "Nous nous investissons de tout cœur dans ce projet."),
          ("L'ouvrier démolit le mur de la cuisine.", "Les ouvriers démolissent le mur de la cuisine."),
          ("Tu réfléchis beaucoup mais tu agis peu.", "Vous réfléchissez beaucoup mais vous agissez peu."),
          ("La capucine fleurit tout l'été.", "Les capucines fleurissent tout l'été."),
          ("Ne lui désobéis jamais !", "Ne lui désobéissez jamais !"),
          ("Elle rougit à la moindre remarque.", "Elles rougissent à la moindre remarque.")]
    ch = [("Dans les prochains jours, il ___ une opération.", ["subiront", "subira", "subirai"], "subira"),
          ("___ un peu plus dans cette association.", ["Investis-toi", "Investissons-toi", "Investissez-toi"], "Investis-toi"),
          ("Le temps ___ dans le sud de la France.", ["se radoucis", "se radoucit", "se radoucissons"], "se radoucit"),
          ("Les enfants ___ devant le lionceau du zoo.", ["s'attendrit", "s'attendrissiez", "s'attendrissent"], "s'attendrissent"),
          ("___ le pas, elle n'arrive pas à nous suivre.", ["Ralentit", "Ralentissent", "Ralentissons"], "Ralentissons"),
          ("Les éléphants ___ exclusivement de plantes.", ["se nourrissent", "se nourrit", "se nourrissez"], "se nourrissent"),
          ("Nous ___ notre campement près de la rivière.", ["établirai", "établirons", "établiront"], "établirons"),
          ("___ le beurre avant d'ajouter le sucre.", ["Ramollissez", "Ramollissent", "Ramollit"], "Ramollissez")]
    ex4 = ["En ce moment, la nervosité de Jacques (trahir) ___ son inquiétude. = trahit",
           "(Définir) ___ la notion de responsabilité en 10 lignes. Vous avez 5 minutes. = Définissez",
           "Tu perdras du poids et tu (ne pas regrossir) ___ au moindre écart. = ne regrossiras pas",
           "Je suis sûre que vous (gravir) ___ prochainement les échelons. = gravirez",
           "Le ciel (s'éclaircir) ___ et les premiers rayons du soleil apparaissent. = s'éclaircit",
           "Ce concours est une chance pour toi : (saisir) ___ l'occasion ! = saisis",
           "Commençons par laver les légumes, nous les (blanchir) ___ plus tard. = blanchirons",
           "Je te (fournir) ___ les informations la semaine prochaine. = fournirai"]
    mix = [("nous finissons", "finissons", "présent"), ("ils choisiront", "choisiront", "futur simple"), ("réfléchis !", "réfléchis", "impératif présent"),
           ("elles rougissent", "rougissent", "présent"), ("je grossirai", "grossirai", "futur simple"), ("obéissez !", "obéissez", "impératif présent"),
           ("tu agis", "agis", "présent"), ("vous gravirez", "gravirez", "futur simple"), ("ralentissons !", "ralentissons", "impératif présent"), ("il fleurit", "fleurit", "présent")]
    return lesson(lid, "2e groupe 1", "2e groupe : présent, futur et impératif", "المجموعة الثانية: المضارع والمستقبل والأمر", "🌱", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), match(lid, 3, rel),
        rewrite(lid, 4, "Je mets le sujet au pluriel et je fais les changements.", "حوّل الفاعل إلى الجمع وغيّر ما يلزم.", rw, "Au pluriel", "إلى الجمع"),
        choose(lid, 5, ch, "Le verbe bien conjugué", "الفعل المصرَّف صحيحاً"),
        fill(lid, 6, ex4, "Présent, futur ou impératif ?", "مضارع أم مستقبل أم أمر؟", "Je conjugue au temps qui convient.", "اختر الزمن المناسب للمعنى."),
        speed(lid, 7, mix)])


def g2_imparfait_pc():
    lid = "l4-cj13"
    verbs = [("finir", "imparfait", "finissais finissais finissait finissions finissiez finissaient"),
             ("finir", "passé composé", "ai fini / as fini / a fini / avons fini / avez fini / ont fini"),
             ("se réjouir", "passé composé", "me suis réjoui(e) / t'es réjoui(e) / s'est réjoui(e) / nous sommes réjoui(e)s / vous êtes réjoui(e)s / se sont réjoui(e)s")]
    cards = [("Imparfait : radical + iss + ais, ais, ait, ions, iez, aient. — je finissais", "الماضي الناقص: الجذر + iss + النهايات", "🌫️"),
             ("Passé composé : avoir + participe en -i. — j'ai fini, nous avons choisi", "الماضي المركّب: avoir + اسم مفعول ينتهي بـ i", "✅"),
             ("Pronominaux (se divertir, se réjouir…) : être. — Elle s'est rafraîchie.", "الأفعال الانعكاسية تُصرَّف مع être ويتطابق اسم المفعول", "🪞"),
             ("Le participe en -i ne prend jamais de -t ni de -s seul : j'ai fini (pas « finit »).", "اسم المفعول fini لا يُكتب finit ولا finis", "⚠️")]
    per = [("Le groupe a choisi de continuer son projet.", "a choisi", "passé composé"), ("L'avion a atterri pour éviter un accident.", "a atterri", "passé composé"),
           ("Le professeur avertissait les élèves.", "avertissait", "imparfait"), ("Les séismes anéantissaient les monuments.", "anéantissaient", "imparfait"),
           ("Tu as désobéi aux ordres de ton chef.", "as désobéi", "passé composé"), ("Elle éblouissait les invités.", "éblouissait", "imparfait"),
           ("Vous avez garni la classe de rubans.", "avez garni", "passé composé"), ("Les remèdes guérissaient quelques maladies.", "guérissaient", "imparfait"),
           ("Les applications ont ralenti mon portable.", "ont ralenti", "passé composé"), ("Je réagissais à la vue d'un cafard.", "réagissais", "imparfait")]
    rel = [("Ils", "saisissaient toutes les occasions pour se retrouver."), ("Ton amie et toi", "avez embelli le décor du salon."),
           ("Ce monsieur", "punissait souvent les comportements inappropriés."), ("Carole et moi", "avons farci les courgettes."),
           ("Tu", "as trahi la confiance de tes amis."), ("Je", "chérissais toujours ma grand-mère.")]
    ex3 = ["Je n'ai pas reconnu les enfants des voisins. Ils (grandir – passé composé) ___ si vite. = ont grandi",
           "Tu (éblouir – imparfait) ___ le jury avec tes informations. = éblouissais",
           "Elle (finir – passé composé) ___ son examen avec deux heures d'avance. = a fini",
           "Tu (ne pas réfléchir – passé composé) ___ avant de répondre. = n'as pas réfléchi",
           "Notre photo de famille (remplir – imparfait) ___ mon cœur de joie. = remplissait",
           "Bravo ! Vous (réussir – passé composé) ___ à résoudre cet exercice. = avez réussi",
           "Cette berceuse (garantir – imparfait) ___ le sommeil du bébé. = garantissait",
           "Le randonneur (choisir – passé composé) ___ le chemin le plus court. = a choisi"]
    rw = [("La pluie adoucit le temps.", "La pluie a adouci le temps."), ("Autrefois, je jouissais d'une grande imagination.", "Autrefois, j'ai joui d'une grande imagination."),
          ("Elles agissent de manière très arrogante.", "Elles ont agi de manière très arrogante."),
          ("Cette tendance culinaire envahit le monde.", "Cette tendance culinaire a envahi le monde."),
          ("Le tigre rugit à la vue des visiteurs.", "Le tigre a rugi à la vue des visiteurs."), ("Les moisissures pourrissent les fruits.", "Les moisissures ont pourri les fruits.")]
    hu = [("Elle a *finit* son examen.", "fini", "اسم المفعول من finir هو fini"),
          ("Nous *finisions* nos devoirs le soir.", "finissions", "الماضي الناقص يحتاج iss: finissions"),
          ("Elles se sont *rafraîchi* à la fontaine.", "rafraîchies", "مع être يتطابق مع الفاعل المؤنث الجمع"),
          ("Tu *a* trahi la confiance de tes amis.", "as", "مع tu: as")]
    return lesson(lid, "2e groupe 2", "2e groupe : imparfait et passé composé", "المجموعة الثانية: الماضي الناقص والمركّب", "🌿", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), identify(lid, 3, per), match(lid, 4, rel),
        fill(lid, 5, ex3, "Au temps demandé", "بالزمن المطلوب"),
        rewrite(lid, 6, "Je mets la phrase au passé composé.", "حوّل الجملة إلى الماضي المركّب.", rw), hunt(lid, 7, hu), speed(lid, 8, per)])


def g2_pqp():
    lid = "l4-cj14"
    verbs = [("finir", "plus-que-parfait", "avais fini / avais fini / avait fini / avions fini / aviez fini / avaient fini"),
             ("se divertir", "plus-que-parfait", "m'étais diverti(e) / t'étais diverti(e) / s'était diverti(e) / nous étions diverti(e)s / vous étiez diverti(e)s / s'étaient diverti(e)s")]
    cards = [("Plus-que-parfait : avoir à l'imparfait + participe en -i. — J'avais fini.", "الماضي الأسبق: avoir في الماضي الناقص + اسم مفعول بـ i", "⏪"),
             ("Pronominaux : être à l'imparfait. — Elle s'était rafraîchie.", "الانعكاسية: être في الماضي الناقص", "🪞"),
             ("COD après le verbe : pas d'accord. — Elles s'étaient rafraîchi la figure.", "إذا جاء المفعول المباشر بعد الفعل لا تطابق", "💧")]
    trap = [("Ils avaient minci", "Oui"), ("Nous avions pénétré", "Non"), ("Vous aviez chéri", "Oui"), ("Nous avions pris", "Non"),
            ("Elle pâlissait", "Non"), ("Nous avions frémi", "Oui"), ("J'ai trahi", "Non"), ("J'avais farci", "Oui"),
            ("Elle a flétri", "Non"), ("On avait fini", "Oui"), ("Elle avait guéri", "Oui"), ("Tu avais gémi", "Oui")]
    ch = [(f"{v} → 2e groupe au plus-que-parfait ?", ["Oui", "Non"], a) for v, a in trap]
    rw = [("Les histoires mystérieuses remplissent les enfants d'émerveillement.", "Les histoires mystérieuses avaient rempli les enfants d'émerveillement."),
          ("Je réunis tous les timbres de ma collection dans un album.", "J'avais réuni tous les timbres de ma collection dans un album."),
          ("Tu applaudis aux pitreries du clown.", "Tu avais applaudi aux pitreries du clown."),
          ("Nous nous sommes munis d'eau et de provisions.", "Nous nous étions munis d'eau et de provisions."),
          ("Les motards ralentissent pour se faufiler.", "Les motards avaient ralenti pour se faufiler."),
          ("Les Portugais bâtissent des barrages.", "Les Portugais avaient bâti des barrages.")]
    aux = ["La bibliothèque s' ___ enrichie de nombreux livres. = était", "Mes parents ___ établi une liste de tâches ménagères. = avaient",
           "J' ___ réfléchi à une solution écologique. = avais", "La population ___ vieilli et s' ___ appauvrie au fil des années. = avait | était",
           "Nous ___ agrandi la page d'accueil. = avions", "La neige ___ durci et craquait sous les pas. = avait"]
    ex4 = ["Les mauvaises herbes (envahir) ___ le jardin en quelques jours. = avaient envahi",
           "Tu (haïr) ___ Étienne durant des années. = avais haï", "Les chercheurs (ne pas réussir) ___ à atteindre leur objectif. = n'avaient pas réussi",
           "Ce pays (abolir) ___ cette loi bien avant d'autres. = avait aboli", "Alec n'avait pas reconnu Luc, il (grandir) ___ tellement vite ! = avait grandi",
           "Louis et moi regrettons ce dérapage, nous (agir) ___ sous le coup de la colère. = avions agi",
           "Vous étiez punis parce que vous (désobéir) ___. = aviez désobéi"]
    mix = [("j'avais fini", "avais fini", "plus-que-parfait"), ("tu finissais", "finissais", "imparfait"), ("ils ont choisi", "ont choisi", "passé composé"),
           ("nous finissons", "finissons", "présent"), ("elle s'était rafraîchie", "s'était rafraîchie", "plus-que-parfait"), ("vous grandirez", "grandirez", "futur simple"),
           ("elles ont agi", "ont agi", "passé composé"), ("on avait guéri", "avait guéri", "plus-que-parfait"), ("je réagissais", "réagissais", "imparfait"),
           ("obéis !", "obéis", "impératif présent")]
    return lesson(lid, "2e groupe 3", "2e groupe : le plus-que-parfait", "المجموعة الثانية: الماضي الأسبق", "⏪", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), choose(lid, 3, ch, "Attention aux pièges !", "انتبه للفخاخ!"),
        rewrite(lid, 4, "Je mets la phrase au plus-que-parfait.", "حوّل الجملة إلى الماضي الأسبق.", rw),
        fill(lid, 5, aux, "Avoir ou être ?", "avoir أم être؟", "Je complète avec l'auxiliaire à l'imparfait.", "أكمل بالفعل المساعد في الماضي الناقص."),
        fill(lid, 6, ex4, "Au plus-que-parfait", "بالماضي الأسبق"), speed(lid, 7, mix)])


def g2_conditionnel():
    lid = "l4-cj15"
    verbs = [("finir", "conditionnel présent", "finirais finirais finirait finirions finiriez finiraient"),
             ("choisir", "conditionnel présent", "choisirais choisirais choisirait choisirions choisiriez choisiraient")]
    cards = [("Conditionnel : infinitif + ais, ais, ait, ions, iez, aient. — je finirais", "الشرطي: المصدر + نهايات الماضي الناقص", "🤔"),
             ("Si + imparfait → conditionnel. — Si tu voulais travailler, tu saisirais cette opportunité.", "إذا + ماضٍ ناقص ← شرطي", "🔀"),
             ("Si + présent → futur. — Si tu continues, tu grossiras.", "إذا + مضارع ← مستقبل", "➡️")]
    rel = [("La vache et le taureau", "mugiraient en voyant le veau."), ("Si nous voulions éviter d'autres accidents, nous", "élargirions la route."),
           ("Si tu voulais vraiment travailler, tu", "saisirais cette opportunité."), ("Si je devais partir en Indonésie, je", "convertirais mes dollars en roupies."),
           ("En mettant des fleurs, vous", "embelliriez la façade de votre maison."), ("Avec un nouveau moteur, sa voiture", "vrombirait à nouveau.")]
    inf = [("Sans les barrages, l'eau engloutirait la ville.", ["engloutir", "engloutirait", "glouter"], "engloutir"),
           ("Si un incendie se déclarait, nous avertirions les pompiers.", ["avertir", "avertirions", "vertir"], "avertir"),
           ("Nous vieillirions moins vite si nous faisions plus de sport.", ["vieillir", "vieux", "vieillirions"], "vieillir"),
           ("Vous approfondiriez vos connaissances si vous lisiez davantage.", ["approfondir", "profond", "approfondiriez"], "approfondir"),
           ("Je pensais que vous réagiriez plus promptement.", ["réagir", "agir", "réagiriez"], "réagir")]
    rw = [("Ils vomiraient leur repas en cas d'empoisonnement.", "Il vomirait son repas en cas d'empoisonnement."),
          ("Elle mincirait plus facilement.", "Elles minciraient plus facilement."), ("Cette loi abolirait les pratiques anciennes.", "Ces lois aboliraient les pratiques anciennes."),
          ("Nous punirions ce comportement.", "Je punirais ce comportement."), ("Je garantirais votre sécurité.", "Nous garantirions votre sécurité."),
          ("En cas de forte chaleur, je m'évanouirais.", "En cas de forte chaleur, nous nous évanouirions.")]
    ex4 = ["Si j'avais l'occasion de visiter l'Inde, je (choisir) ___ d'aller au Taj Mahal. = choisirais",
           "Tu (agir) ___ de la même manière si tu étais à ma place. = agirais",
           "L'excursion (enrichir) ___ nos activités si elle était bien organisée. = enrichirait",
           "Si tu avais des problèmes de santé, tu (s'évanouir) ___ avant la fin du match. = t'évanouirais",
           "Le coureur (réussir) ___ à finir sa course s'il s'entraînait plus. = réussirait",
           "Elles croyaient qu'en utilisant ces produits, elles (rajeunir) ___. = rajeuniraient",
           "Si nous ne faisions pas attention, nous (subir) ___ des conséquences graves. = subirions",
           "(Garantir) ___-vous sa présence le jour de l'ouverture ? = Garantiriez"]
    mix = [("je finirais", "finirais", "conditionnel présent"), ("je finirai", "finirai", "futur simple"), ("nous choisirions", "choisirions", "conditionnel présent"),
           ("nous choisissions", "choisissions", "imparfait"), ("tu grandiras", "grandiras", "futur simple"), ("tu grandirais", "grandirais", "conditionnel présent"),
           ("ils réussiraient", "réussiraient", "conditionnel présent"), ("ils réussissaient", "réussissaient", "imparfait"), ("vous agirez", "agirez", "futur simple"),
           ("vous agiriez", "agiriez", "conditionnel présent")]
    return lesson(lid, "2e groupe 4", "2e groupe : le conditionnel présent", "المجموعة الثانية: الشرطي", "🤔", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), match(lid, 3, rel), choose(lid, 4, inf, "Quel est l'infinitif ?", "ما المصدر؟"),
        rewrite(lid, 5, "Je mets le sujet au singulier ou au pluriel.", "حوّل الفاعل إلى المفرد أو الجمع وغيّر ما يلزم.", rw, "Singulier ou pluriel", "مفرد أم جمع"),
        fill(lid, 6, ex4, "Au conditionnel présent", "بالشرطي"),
        speed(lid, 7, mix, "Défi chrono : les jumeaux", "تحدّي السرعة: الأزمنة المتشابهة", 60, 10)])


def g2_bilan():
    lid = "l4-cj16"
    rel = [("Les bouffons", "divertissaient le roi."), ("Valérie, Anne et moi", "répartirons le travail équitablement."),
           ("J'", "avais investi toutes mes économies dans mon restaurant."), ("Tu", "raccourcis ton pantalon."),
           ("Cet avion", "atterrirait à la verticale, comme un hélicoptère."), ("Ton amie et toi", "avez agi sans réfléchir.")]
    ex2 = ["Si tu (maigrir) ___ progressivement, ce serait mieux pour ta santé. = maigrissais",
           "Si nous investissons des efforts, nous (s'enrichir) ___ en expérience. = nous enrichirons",
           "Les kiwis (mûrir) ___ plus vite si tu les mettais hors du réfrigérateur. = mûriraient ; muriraient",
           "Le ciel (s'assombrir) ___ ; on aurait dit qu'il allait pleuvoir. = s'assombrissait",
           "Si vous (remplir) ___ trop la baignoire, elle débordera. = remplissez",
           "D'ici quelques semaines, les feuilles des arbres (jaunir) ___. = jauniront",
           "Je (frémir) ___ de peur si je devais voir une mygale. = frémirais",
           "Si tu continues à manger si gras, tu (grossir) ___. = grossiras",
           "En ce moment, le boulanger (pétrir) ___ la pâte. = pétrit"]
    ch = [("Tu ___ notre secret ; je ne te ferai plus jamais confiance.", ["trahi", "avait trahi", "trahissais", "as trahi"], "as trahi"),
          ("Les crabes ___ de coquillages et de crevettes.", ["se nourrissent", "se nourrit", "nous nourrions", "vous nourrissez"], "se nourrissent"),
          ("___-vous, les vacances arrivent à grands pas.", ["Réjouit", "Réjouis", "Réjouissons", "Réjouissez"], "Réjouissez"),
          ("Tôt ou tard, la vérité ___ par éclater.", ["finissais", "finira", "ont fini", "finirai"], "finira"),
          ("Nous ___ calmement à l'annonce de la nouvelle.", ["avions réagi", "avaient réagi", "a réagi", "aviez réagi"], "avions réagi"),
          ("Vite, ___ le médecin, le fils du voisin est tombé !", ["avertirais", "as averti", "avertis", "avertirons"], "avertis"),
          ("Nous ___ sous les couvertures.", ["vous blottissez", "nous blottissons", "se sont blottis", "me blottis"], "nous blottissons"),
          ("J' ___ le mur car il risquait de s'écrouler.", ["avions démoli", "démolissait", "démolirai", "avais démoli"], "avais démoli"),
          ("Il a habité dans un pays anglophone mais ___ à parler anglais.", ["n'as jamais réussi", "n'a jamais réussi", "ne réussissaient jamais", "ne réussit jamais"], "n'a jamais réussi"),
          ("Je ___ des montagnes pour le retrouver.", ["franchirions", "avait franchi", "franchirais", "franchirait"], "franchirais")]
    ex4 = ["(Ne pas éblouir – impératif, tu) ___ les autres conducteurs. = N'éblouis pas",
           "J' (définir – futur simple) ___ l'objectif à atteindre. = définirai",
           "Vous (franchir – plus-que-parfait) ___ une étape importante. = aviez franchi",
           "Cet homme (bâtir – passé composé) ___ une entreprise prospère. = a bâti",
           "Mes frères et moi (bondir – conditionnel) ___ de joie si nous pouvions partir. = bondirions",
           "(Enfouir – impératif, nous) ___ notre trésor dans le sable. = Enfouissons"]
    val = [("N'éblouis pas les autres conducteurs.", "N'éblouis pas", "ordre"),
           ("Je définirai l'objectif à atteindre ultérieurement.", "définirai", "action qui va avoir lieu dans le futur"),
           ("Cet homme a bâti une entreprise prospère.", "a bâti", "action complètement achevée dans le passé"),
           ("Nous bondirions de joie si nous pouvions aller aux États-Unis.", "bondirions", "quelque chose qui peut se passer si les conditions le permettent"),
           ("Plus les années passent, plus on s'assagit.", "s'assagit", "vérité générale"),
           ("Après toutes ces années, elle rougissait toujours sans raison.", "rougissait", "description")]
    mix = [("ils divertissaient", "divertissaient", "imparfait"), ("nous répartirons", "répartirons", "futur simple"), ("j'avais investi", "avais investi", "plus-que-parfait"),
           ("tu raccourcis", "raccourcis", "présent"), ("il atterrirait", "atterrirait", "conditionnel présent"), ("vous avez agi", "avez agi", "passé composé"),
           ("enfouissons !", "enfouissons", "impératif présent"), ("elles avaient fourni", "avaient fourni", "plus-que-parfait"),
           ("je bondirais", "bondirais", "conditionnel présent"), ("on s'assagit", "s'assagit", "présent"), ("tu jauniras", "jauniras", "futur simple"),
           ("nous pétrissions", "pétrissions", "imparfait")]
    return lesson(lid, "Bilan 3", "Bilan : les verbes du 2e groupe", "مراجعة: أفعال المجموعة الثانية", "🏁", [
        match(lid, 1, rel), fill(lid, 2, ex2, "Le temps qui convient", "الزمن المناسب", "Présent, futur, imparfait ou conditionnel ?", "مضارع أم مستقبل أم ناقص أم شرطي؟"),
        choose(lid, 3, ch, "Choisis la bonne réponse", "اختر الإجابة الصحيحة"), fill(lid, 4, ex4, "Au temps demandé", "بالزمن المطلوب"),
        valeur(lid, 5, val), speed(lid, 6, mix, "Défi final : le 2e groupe", "التحدّي النهائي: المجموعة الثانية", 60, 12)], kind="bilan")


def av_present():
    lid = "l4-cj17"
    verbs = [("aller", "présent", "vais vas va allons allez vont"), ("venir", "présent", "viens viens vient venons venez viennent"),
             ("aller", "futur simple", "irai iras ira irons irez iront"), ("venir", "futur simple", "viendrai viendras viendra viendrons viendrez viendront"),
             ("aller", "impératif présent", "va allons allez"), ("venir", "impératif présent", "viens venons venez")]
    cards = [("Aller est irrégulier : je vais, nous allons, ils vont — futur : j'irai.", "aller فعل شاذ: يتغير جذره كلياً (vais / allons / irai)", "🚀"),
             ("Venir : je viens, nous venons, ils viennent — futur : je viendrai.", "venir: viens / venons / viennent، والمستقبل viendrai", "🛬"),
             ("Futur proche : aller au présent + infinitif. — Je vais manger.", "المستقبل القريب: aller في المضارع + مصدر", "⏩"),
             ("Passé récent : venir de + infinitif. — Je viens de téléphoner.", "الماضي القريب: venir de + مصدر", "⏮️")]
    per = [("Nous allons au Brésil au mois de mai.", "allons", "présent"), ("Mes amies viendront nous rejoindre dans 30 minutes.", "viendront", "futur simple"),
           ("Allons cueillir des fleurs dans le jardin !", "Allons", "impératif présent"), ("Viens-tu dîner chez nous ce soir ?", "Viens", "présent"),
           ("Mes parents iront à San Francisco l'année prochaine.", "iront", "futur simple"), ("Venez à la réunion vers 18 h.", "Venez", "impératif présent"),
           ("Carl va à la patinoire tous les jours.", "va", "présent"), ("Josiane viendra donner cours au lycée.", "viendra", "futur simple"),
           ("Va dans ta chambre étudier tes leçons.", "Va", "impératif présent"), ("Je viens acheter une série documentaire.", "viens", "présent")]
    ex2 = ["Puisque tu insistes, j' (aller – futur simple) ___ au Burkina Faso le mois prochain. = irai",
           "Maxime (venir – futur simple) ___ te chercher quand tu auras terminé. = viendra",
           "Anne et toi (aller – présent) ___ rater votre avion si vous restez ici. = allez",
           "Mes cousins (venir – présent) ___ de Lyon. = viennent",
           "(Venir – impératif, vous) ___ nous rendre visite, nous vous attendons. = Venez",
           "Alexis et René (aller – futur simple) ___ en Angleterre. = iront"]
    ex3 = ["Aujourd'hui, Paul (aller) ___ au Rif oriental, au Maroc. = va", "Tu (venir) ___ m'apprendre les règles de ce jeu dans la soirée. = viendras",
           "Je (venir) ___ à l'instant du supermarché. = viens", "Nous (aller) ___ demain payer la facture de téléphone. = irons",
           "J' (aller) ___ maintenant à la bibliothèque. = vais", "Rouba et Nada (venir) ___ assister au tournoi le mois prochain. = viendront",
           "Elle (venir) ___ d'apprendre l'hymne national par cœur. = vient"]
    pr = [("Je vais manger mon goûter.", ["futur proche", "passé récent"], "futur proche"), ("Nous venons de terminer nos devoirs.", ["futur proche", "passé récent"], "passé récent"),
          ("Ils vont rater leur avion !", ["futur proche", "passé récent"], "futur proche"), ("Elle vient d'apprendre l'hymne national.", ["futur proche", "passé récent"], "passé récent"),
          ("Tu vas adorer ce film.", ["futur proche", "passé récent"], "futur proche"), ("Je viens de lui téléphoner.", ["futur proche", "passé récent"], "passé récent")]
    hu = [("Demain, ils *allerons* au stade.", "iront", "مستقبل aller هو ir-: iront"),
          ("Mes cousins *vienent* de Lyon.", "viennent", "مع ils تُضاعف النون: viennent"),
          ("Nous *venirons* te voir.", "viendrons", "مستقبل venir هو viendr-"),
          ("*Vas* dans ta chambre !", "Va", "أمر aller للمفرد بلا s: Va")]
    return lesson(lid, "Aller-venir 1", "Aller et venir : présent, futur et impératif", "aller وvenir: المضارع والمستقبل والأمر", "🚀", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), identify(lid, 3, per),
        choose(lid, 4, pr, "Futur proche ou passé récent ?", "مستقبل قريب أم ماضٍ قريب؟"),
        fill(lid, 5, ex2, "Au temps demandé", "بالزمن المطلوب"),
        fill(lid, 6, ex3, "Je repère l'indicateur de temps", "أبحث عن مؤشر الزمن", "Le mot de temps (demain, maintenant…) m'aide à choisir.", "كلمة الزمن (demain, maintenant…) تساعدك على الاختيار."),
        hunt(lid, 7, hu), speed(lid, 8, per)])


def av_imparfait_pc():
    lid = "l4-cj18"
    verbs = [("aller", "imparfait", "allais allais allait allions alliez allaient"), ("venir", "imparfait", "venais venais venait venions veniez venaient"),
             ("aller", "passé composé", "suis allé(e) / es allé(e) / est allé(e) / sommes allé(e)s / êtes allé(e)s / sont allé(e)s"),
             ("venir", "passé composé", "suis venu(e) / es venu(e) / est venu(e) / sommes venu(e)s / êtes venu(e)s / sont venu(e)s")]
    cards = [("Imparfait : j'allais, nous allions — je venais, nous venions.", "الماضي الناقص منتظم: all- / ven- + النهايات", "🌫️"),
             ("Passé composé avec être : je suis allé(e), elles sont venues.", "aller وvenir يُصرَّفان مع être في الماضي المركّب", "🚶"),
             ("Le participe s'accorde avec le sujet : Nous sommes allées (filles).", "يتطابق اسم المفعول مع الفاعل جنساً وعدداً", "🔗"),
             ("Habitude → imparfait (chaque été, j'allais…). Action finie → passé composé (hier, je suis allé…).", "العادة ← الناقص، والحدث المنتهي ← المركّب", "⚖️")]
    rel = [("Tu", "venais souvent discuter avec la bibliothécaire."), ("Sa peur des araignées", "allait jusqu'à l'aversion."),
           ("Vous", "êtes allés à pied de la gare jusqu'au centre-ville."), ("Nous", "sommes venus exprimer notre solidarité."),
           ("J'", "allais toujours au bout de mes rêves."), ("Les secouristes", "sont venus en aide aux blessés.")]
    ex2 = ["Chaque semaine, j' (aller – imparfait) ___ chez le marchand de fruits. = allais",
           "Tu (venir – passé composé) ___ au lycée en début d'année. = es venu ; es venue ; es venu(e)",
           "Jérémy (aller – passé composé) ___ à Valenciennes apprendre le saxophone. = est allé",
           "Clara (venir – imparfait) ___ souvent nous rendre visite. = venait",
           "Chaque année, nous (aller – imparfait) ___ en vacances à Barcelone. = allions",
           "René et Serge (aller – passé composé) ___ à la cuisine. = sont allés",
           "Chaque été, Bonnie et Jessica (venir – imparfait) ___ au Texas. = venaient"]
    subj = [("Quand ___ sommes allées en Arabie saoudite, nous avons mangé des dattes.", ["nous", "vous", "elles", "je"], "nous"),
            ("___ allais chercher du bois mort pour faire un feu.", ["Tu", "Il", "Nous", "Vous"], "Tu"),
            ("___ êtes allés lui rendre visite à l'hôpital.", ["Bertrand et toi", "Bertrand et moi", "Bertrand", "Ils"], "Bertrand et toi"),
            ("___ allaient en Tanzanie pour faire un safari.", ["Les touristes", "Le touriste", "Nous", "Tu"], "Les touristes"),
            ("___ sommes venus assister à la compétition.", ["Geoffroy et moi", "Geoffroy et toi", "Geoffroy", "Ils"], "Geoffroy et moi"),
            ("___ venaient se briser sur la plage de sable fin.", ["Les vagues", "La vague", "Nous", "Vous"], "Les vagues"),
            ("___ suis allée à la police déclarer la perte de mon portefeuille.", ["Je", "Tu", "Elle", "On"], "Je")]
    ex4 = ["Lorsqu'il était enfant, il (ne jamais aller) ___ au parc d'attractions. = n'allait jamais",
           "La jeune femme (venir) ___ ce matin te souhaiter bonne chance. = est venue",
           "Il (venir) ___ tous les jours chez nous mais il ne restait jamais longtemps. = venait",
           "Hier, les enfants (aller) ___ au musée des miniatures. = sont allés",
           "Nous (aller) ___ souvent au zoo voir les singes. = allions",
           "Ils (aller) ___ à la conquête de nouveaux territoires. = sont allés"]
    val = [("Il venait tous les jours chez nous.", "venait", "habitude"), ("Hier, les enfants sont allés au musée.", "sont allés", "action complètement achevée dans le passé"),
           ("Nous allions souvent au zoo voir les singes.", "allions", "habitude"), ("La jeune femme est venue ce matin te souhaiter bonne chance.", "est venue", "action complètement achevée dans le passé")]
    mix = [("j'allais", "allais", "imparfait"), ("elle est venue", "est venue", "passé composé"), ("nous venions", "venions", "imparfait"),
           ("ils sont allés", "sont allés", "passé composé"), ("tu iras", "iras", "futur simple"), ("vous veniez", "veniez", "imparfait"),
           ("je suis venu", "suis venu", "passé composé"), ("ils viennent", "viennent", "présent"), ("on allait", "allait", "imparfait"), ("va !", "va", "impératif présent")]
    return lesson(lid, "Aller-venir 2", "Aller et venir : imparfait et passé composé", "aller وvenir: الماضي الناقص والمركّب", "🛬", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), match(lid, 3, rel), fill(lid, 4, ex2, "Au temps demandé", "بالزمن المطلوب"),
        choose(lid, 5, subj, "Quel sujet ?", "ما الفاعل المناسب؟"),
        fill(lid, 6, ex4, "Imparfait ou passé composé ?", "ناقص أم مركّب؟", "Habitude ou action finie ?", "عادة أم حدث انتهى؟"),
        valeur(lid, 7, val), speed(lid, 8, mix)])


def av_pqp():
    lid = "l4-cj19"
    verbs = [("aller", "plus-que-parfait", "étais allé(e) / étais allé(e) / était allé(e) / étions allé(e)s / étiez allé(e)s / étaient allé(e)s"),
             ("venir", "plus-que-parfait", "étais venu(e) / étais venu(e) / était venu(e) / étions venu(e)s / étiez venu(e)s / étaient venu(e)s")]
    cards = [("Plus-que-parfait : être à l'imparfait + allé / venu. — J'étais allé(e).", "الماضي الأسبق: être في الماضي الناقص + allé / venu", "⏪"),
             ("Accord avec le sujet : Elles étaient venues. Nous étions allés.", "يتطابق اسم المفعول مع الفاعل", "🔗"),
             ("Attention : « J'allais » (imparfait) ≠ « J'étais allé » (plus-que-parfait).", "انتبه: allais ناقص، أما étais allé فماضٍ أسبق", "⚠️")]
    pq = [("Nous étions allés visiter le musée.", "étions allés", "1re pers. plur."), ("Il était venu voir les dégâts.", "était venu", "3e pers. sing."),
          ("J'étais venue lui rendre visite.", "étais venue", "1re pers. sing."), ("Elles étaient allées au club de sport.", "étaient allées", "3e pers. plur."),
          ("Tu étais allée au Liban voir les Cèdres.", "étais allée", "2e pers. sing."), ("Vous étiez allés rendre le livre.", "étiez allés", "2e pers. plur.")]
    ex2 = ["Elle (aller) ___ visiter les monuments de toute l'Europe. = était allée",
           "Elle (venir) ___ à la conférence présenter son projet. = était venue",
           "Julien (venir) ___ en aide aux élèves en difficulté. = était venu",
           "Tu (aller) ___ te préparer pour la réunion. = étais allé ; étais allée ; étais allé(e)",
           "Nous (venir) ___ l'encourager dans les coulisses. = étions venus ; étions venues ; étions venu(e)s",
           "Il (aller) ___ pêcher des oursins. = était allé"]
    hu = [("Mon père était *allée* acheter un gâteau.", "allé", "mon père مذكر مفرد: allé"),
          ("Nous étions *venu* vous présenter des excuses.", "venus", "nous جمع: venus"),
          ("Les infirmières *était* venues donner les médicaments.", "étaient", "les infirmières جمع: étaient"),
          ("Mon amie étais *venu* en Égypte.", "venue", "mon amie مؤنث: venue"),
          ("Le jeune garçon *allait* venu passer un examen.", "était", "الماضي الأسبق يحتاج être: était venu")]
    return _av_pqp_tail(lid, cards, verbs, pq, ex2, hu)


def _av_pqp_tail(lid, cards, verbs, pq, ex2, hu):
    rw = [("Il était allé en France assister à un tournoi.", "Ils étaient allés en France assister à un tournoi."),
          ("Elle était venue faire le ménage.", "Elles étaient venues faire le ménage."),
          ("J'étais allé me promener près de la rivière.", "Nous étions allés nous promener près de la rivière."),
          ("Tu étais venu au dîner sans nous avertir.", "Vous étiez venus au dîner sans nous avertir."),
          ("Le voyageur français était venu en bateau.", "Les voyageurs français étaient venus en bateau."),
          ("Tu étais allé en Australie voir les kangourous.", "Vous étiez allés en Australie voir les kangourous.")]
    mix = [("j'étais allé", "étais allé", "plus-que-parfait"), ("j'allais", "allais", "imparfait"), ("elle était venue", "était venue", "plus-que-parfait"),
           ("elle venait", "venait", "imparfait"), ("nous sommes allés", "sommes allés", "passé composé"), ("nous étions allés", "étions allés", "plus-que-parfait"),
           ("ils viendront", "viendront", "futur simple"), ("ils sont venus", "sont venus", "passé composé"), ("vous étiez venus", "étiez venus", "plus-que-parfait"),
           ("vous alliez", "alliez", "imparfait")]
    return lesson(lid, "Aller-venir 3", "Aller et venir : le plus-que-parfait", "aller وvenir: الماضي الأسبق", "⏪", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), person_quiz(lid, 3, pq),
        fill(lid, 4, ex2, "Au plus-que-parfait", "بالماضي الأسبق"), hunt(lid, 5, hu),
        rewrite(lid, 6, "Je mets le sujet au pluriel et je fais les changements.", "حوّل الفاعل إلى الجمع وغيّر ما يلزم.", rw, "Au pluriel", "إلى الجمع"),
        speed(lid, 7, mix, "Défi chrono : les pièges du passé", "تحدّي السرعة: فخاخ الماضي", 60, 10)])


def av_conditionnel():
    lid = "l4-cj20"
    verbs = [("aller", "conditionnel présent", "irais irais irait irions iriez iraient"),
             ("venir", "conditionnel présent", "viendrais viendrais viendrait viendrions viendriez viendraient")]
    cards = [("Conditionnel : radical du futur + ais, ais, ait, ions, iez, aient.", "الشرطي: جذر المستقبل + نهايات الماضي الناقص", "🤔"),
             ("aller → j'irai → j'irais ; venir → je viendrai → je viendrais", "ir- لـ aller، وviendr- لـ venir", "🔑")]
    rel = [("Si j'avais de l'argent, j'", "irais faire du shopping à Dubaï."), ("En cas d'urgence, nous", "irions immédiatement à son secours."),
           ("Si l'occasion se présentait, vous", "iriez passer des vacances aux Maldives."), ("Si on lui venait en aide, il", "viendrait à bout de ce problème."),
           ("Si nous n'habitions pas si loin, mes enfants", "iraient à l'école à pied."), ("Marc et Martin ont dit qu'ils", "viendraient à la réunion."),
           ("Si on le pouvait, on", "irait chaque jour à la salle de sport.")]
    ex2 = ["J' (aller) ___ volontiers en Suisse si tu m'accompagnais. = irais", "Tu m'avais promis que tu (venir) ___ dîner ! = viendrais",
           "Toi et moi (aller) ___ plus souvent au bois s'il était plus sûr. = irions", "Je me doutais qu'elles (venir) ___ te voir. = viendraient",
           "Clara (venir) ___ t'aider si tu le lui demandais. = viendrait", "Je savais que Mona et toi (aller) ___ lui rendre visite. = iriez",
           "Vous pensiez que nous (venir) ___ tout de suite après le théâtre. = viendrions"]
    return _av_cond_tail(lid, cards, verbs, rel, ex2)


def _av_cond_tail(lid, cards, verbs, rel, ex2):
    ch = [("S'il faisait moins froid, nous ___ faire une promenade.", ["irions", "iraient", "iriez"], "irions"),
          ("Camille ___ avec son époux à la soirée.", ["viendrait", "viendraient", "viendrais"], "viendrait"),
          ("___-tu me rendre visite si tu emménageais à Lyon ?", ["Viendrais", "Viendriez", "Viendrait"], "Viendrais"),
          ("Si ces jeunes avaient plus de persévérance, ils ___ jusqu'au bout.", ["irions", "iraient", "irait"], "iraient"),
          ("Un foulard beige ___ bien avec ta tenue.", ["irais", "irait", "irions"], "irait"),
          ("Éric et toi ___ faire le tour du monde.", ["iraient", "iriez", "irait"], "iriez")]
    rw = [("Nous venons à la cérémonie de ton frère.", "Nous viendrions à la cérémonie de ton frère."),
          ("Ils allaient à la plage voir le coucher du soleil.", "Ils iraient à la plage voir le coucher du soleil."),
          ("Viendrez-vous avec nous au centre commercial ?", "Viendriez-vous avec nous au centre commercial ?"),
          ("Elle ira en Italie goûter les pâtes.", "Elle irait en Italie goûter les pâtes."),
          ("Les touristes étaient venus à Byblos.", "Les touristes viendraient à Byblos.")]
    mix = [("j'irais", "irais", "conditionnel présent"), ("j'irai", "irai", "futur simple"), ("nous viendrions", "viendrions", "conditionnel présent"),
           ("nous viendrons", "viendrons", "futur simple"), ("ils iraient", "iraient", "conditionnel présent"), ("ils allaient", "allaient", "imparfait"),
           ("tu viendrais", "viendrais", "conditionnel présent"), ("tu venais", "venais", "imparfait"), ("vous iriez", "iriez", "conditionnel présent"), ("vous irez", "irez", "futur simple")]
    return lesson(lid, "Aller-venir 4", "Aller et venir : le conditionnel présent", "aller وvenir: الشرطي", "🤔", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), match(lid, 3, rel), fill(lid, 4, ex2, "Au conditionnel présent", "بالشرطي"),
        choose(lid, 5, ch, "Le verbe bien conjugué", "الفعل المصرَّف صحيحاً"),
        rewrite(lid, 6, "Je mets la phrase au conditionnel présent.", "حوّل الجملة إلى الشرطي.", rw), speed(lid, 7, mix)])


def av_bilan():
    lid = "l4-cj21"
    rel = [("Christophe va te répondre dès qu'il sera libre.", "futur proche"), ("Ma tante viendra me rendre visite le mois prochain.", "action qui aura lieu dans le futur"),
           ("Va à l'épicerie au plus vite !", "ordre"), ("Durant notre enfance, nous allions souvent chez nos grands-parents.", "habitude dans le passé"),
           ("Je suis allée chez toi il y a deux jours.", "action achevée dans le passé"), ("Je venais vous demander un service.", "demande atténuée"),
           ("Tu viens chez moi tous les jours apprendre le piano.", "habitude"), ("Vous viendriez si le temps le permettait.", "supposition avec si")]
    ex2 = ["Vous (venir – présent) ___ de nous informer qu'il n'y aura pas classe. = venez",
           "Il (aller – futur simple) ___ demain matin chez le directeur. = ira",
           "Si tu faisais attention, tu (ne pas venir – conditionnel) ___ te plaindre. = ne viendrais pas",
           "J' (aller – passé composé) ___ en Espagne visiter l'Andalousie. = suis allé ; suis allée ; suis allé(e)",
           "Chaque mois, les enfants (aller – imparfait) ___ chez leurs grands-parents. = allaient",
           "(Aller – impératif, tu) ___ chez ta tante lui donner son cadeau. = Va",
           "Si tu tardais, les jeunes filles (venir – conditionnel) ___ en bus. = viendraient"]
    vf = [("Le futur proche = venir au présent + infinitif.", ["Vrai", "Faux"], "Faux", None, "خطأ: المستقبل القريب يُبنى بـ aller"),
          ("Conditionnel de aller, 3e pers. plur. : allaient.", ["Vrai", "Faux"], "Faux", None, "خطأ: الصواب iraient"),
          ("Venir au plus-que-parfait se conjugue avec avoir.", ["Vrai", "Faux"], "Faux", None, "خطأ: مع être"),
          ("Présent de venir, 1re pers. plur. : venons.", ["Vrai", "Faux"], "Vrai"),
          ("Passé composé de aller, 1re pers. sing. : suis allé.", ["Vrai", "Faux"], "Vrai"),
          ("Futur simple de venir, 3e pers. sing. : venira.", ["Vrai", "Faux"], "Faux", None, "خطأ: الصواب viendra"),
          ("Impératif de aller, 2e pers. sing. : vas.", ["Vrai", "Faux"], "Faux", None, "خطأ: الصواب va"),
          ("Imparfait de venir, 2e pers. plur. : veniez.", ["Vrai", "Faux"], "Vrai")]
    ex4 = ["Je (venir) ___ de terminer un puzzle de 80 pièces. = viens",
           "La semaine dernière, mes amis (venir) ___ et ont dit qu'ils étaient prêts à nous aider. = sont venus",
           "Si vous viviez en Alsace, vous (aller) ___ souvent en Allemagne. = iriez",
           "Il y a quelques années, tu (aller) ___ à l'opéra avec ta mère ; en ce moment, tu y (aller) ___ avec ton amie. = allais | vas",
           "La patience (venir) ___ à bout de tout. = vient", "Quand ils (aller) ___ au collège, ces élèves regretteront l'école primaire. = iront",
           "Le vernissage aura lieu samedi. (Venir, vous) ___ nombreux ! = Venez", "Lucien (ne jamais venir) ___ à la maison les mains vides. = ne venait jamais"]
    mix = [("je vais", "vais", "présent"), ("tu iras", "iras", "futur simple"), ("venez !", "venez", "impératif présent"), ("nous allions", "allions", "imparfait"),
           ("elle est venue", "est venue", "passé composé"), ("ils étaient allés", "étaient allés", "plus-que-parfait"), ("vous viendriez", "viendriez", "conditionnel présent"),
           ("ils viennent", "viennent", "présent"), ("je viendrai", "viendrai", "futur simple"), ("tu venais", "venais", "imparfait"), ("on irait", "irait", "conditionnel présent"),
           ("va !", "va", "impératif présent")]
    return lesson(lid, "Bilan 4", "Bilan : aller et venir", "مراجعة: aller وvenir", "🏁", [
        match(lid, 1, rel, "Quel emploi ?", "ما دلالة الزمن؟"), fill(lid, 2, ex2, "Au temps demandé", "بالزمن المطلوب"),
        choose(lid, 3, vf, "Vrai ou faux ?", "صواب أم خطأ؟"),
        fill(lid, 4, ex4, "Le temps qui convient", "الزمن المناسب", "Je choisis le temps qui convient.", "اختر الزمن المناسب للمعنى."),
        speed(lid, 5, mix, "Défi final : aller et venir", "التحدّي النهائي: aller وvenir", 60, 12)], kind="bilan")


def g3_present():
    lid = "l4-cj22"
    verbs = [("offrir", "présent", "offre offres offre offrons offrez offrent"), ("partir", "présent", "pars pars part partons partez partent"),
             ("pouvoir", "présent", "peux peux peut pouvons pouvez peuvent"), ("perdre", "présent", "perds perds perd perdons perdez perdent"),
             ("peindre", "présent", "peins peins peint peignons peignez peignent")]
    cards = [("3e groupe : verbes irréguliers — le radical change souvent selon la personne.", "المجموعة الثالثة: أفعال شاذة يتغير جذرها غالباً حسب الضمير", "🧩"),
             ("-ir comme offrir : e, es, e (j'offre). -ir comme partir : s, s, t (je pars).", "offrir ينتهي بـ e مثل الأولى، وpartir بـ s, s, t", "🎁"),
             ("-dre comme perdre : il perd (sans t). -oir : je peux, ils peuvent.", "perdre: il perd بلا t، وpouvoir: peux / peuvent", "🎯"),
             ("-aindre / -eindre / -oindre : je peins, nous peignons, ils peignent.", "أفعال aindre/eindre: يتحول nd إلى gn مع الجمع", "🎨")]
    rel = [("Les malades", "se remettent lentement."), ("Je", "souffre d'une rage de dents."), ("La sécheresse", "nuit aux récoltes."),
           ("Joe et toi", "répondez poliment aux questions de l'agent."), ("Tu", "offres un cadeau à ta petite sœur."),
           ("Nous", "reconnaissons la nécessité d'économiser de l'énergie.")]
    ex2 = ["Tous les ans, les commerçants (revenir) ___ installer leurs stands. = reviennent",
           "Le souffleur (parvenir) ___ à créer des objets magnifiques. = parvient",
           "Au petit matin, le pont (disparaître) ___ dans la brume. = disparaît ; disparait",
           "Les Inuits (parcourir) ___ les eaux glacées sur leurs kayaks. = parcourent",
           "Avant d'atterrir, le pilote (sortir) ___ le train d'atterrissage. = sort",
           "Comme il pleut, je (prendre) ___ mon parapluie. = prends",
           "Dans la fable, la tortue (battre) ___ le lièvre à la course. = bat",
           "Ce site historique (recevoir) ___ des millions de visiteurs. = reçoit",
           "À marée basse, on (apercevoir) ___ les rochers. = aperçoit"]
    inf = [("Alice et Mélanie apprennent à faire des colliers.", ["apprendre", "apprenner", "prendre"], "apprendre"),
           ("Ce personnage part au secours de ses compagnons.", ["partir", "parter", "partager"], "partir"),
           ("Nous tenons à vous remercier.", ["tenir", "tener", "tendre"], "tenir"),
           ("Vous peignez le fond de votre dessin en bleu.", ["peindre", "peigner", "peinter"], "peindre"),
           ("Le reporter décrit la situation.", ["décrire", "décrir", "écrire"], "décrire"),
           ("Tu dois rester vigilant sur la route.", ["devoir", "doiver", "doir"], "devoir"),
           ("Les joueurs veulent se qualifier pour la finale.", ["vouloir", "veuler", "valoir"], "vouloir")]
    return _g3p_tail(lid, cards, verbs, rel, ex2, inf)


def _g3p_tail(lid, cards, verbs, rel, ex2, inf):
    rw = [("Je cours à perdre haleine pour rattraper mes camarades.", "Nous courons à perdre haleine pour rattraper nos camarades."),
          ("L'accusé comparaît devant une instance officielle.", "Les accusés comparaissent devant une instance officielle."),
          ("Vous accueillez chaleureusement vos invités.", "Tu accueilles chaleureusement tes invités."),
          ("Le serpent perd sa peau lors des mues.", "Les serpents perdent leur peau lors des mues."),
          ("Tu traduis un texte important.", "Vous traduisez un texte important."),
          ("Nous dormons dans une chambre bien chauffée.", "Je dors dans une chambre bien chauffée."),
          ("Le pompier détruit un nid de guêpes.", "Les pompiers détruisent un nid de guêpes.")]
    hu = [("Le serpent *perdt* sa peau.", "perd", "perdre: il perd بلا t"), ("Ils *peuent* venir demain.", "peuvent", "pouvoir: ils peuvent"),
          ("Nous *peindons* le mur en bleu.", "peignons", "peindre: nous peignons"), ("Tu *offrs* un cadeau à ta sœur.", "offres", "offrir مثل أفعال er: tu offres"),
          ("Ce site *recevoit* des visiteurs.", "reçoit", "recevoir: il reçoit")]
    mix = [("je pars", "pars", "partir"), ("ils peuvent", "peuvent", "pouvoir"), ("nous peignons", "peignons", "peindre"), ("tu offres", "offres", "offrir"),
           ("il perd", "perd", "perdre"), ("elle reçoit", "reçoit", "recevoir"), ("vous dites", "dites", "dire"), ("ils prennent", "prennent", "prendre"),
           ("tu dois", "dois", "devoir"), ("nous voulons", "voulons", "vouloir")]
    return lesson(lid, "3e groupe 1", "3e groupe : le présent", "المجموعة الثالثة: المضارع", "🧩", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), match(lid, 3, rel), fill(lid, 4, ex2, "Au présent", "بالمضارع"),
        choose(lid, 5, inf, "Quel est l'infinitif ?", "ما المصدر؟"),
        rewrite(lid, 6, "Je mets le sujet au singulier ou au pluriel.", "حوّل الفاعل إلى المفرد أو الجمع وغيّر ما يلزم.", rw, "Singulier ou pluriel", "مفرد أم جمع"),
        hunt(lid, 7, hu), speed(lid, 8, mix, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in mix}))])


def g3_futur():
    lid = "l4-cj23"
    verbs = [("offrir", "futur simple", "offrirai offriras offrira offrirons offrirez offriront"), ("pouvoir", "futur simple", "pourrai pourras pourra pourrons pourrez pourront"),
             ("perdre", "futur simple", "perdrai perdras perdra perdrons perdrez perdront"), ("faire", "futur simple", "ferai feras fera ferons ferez feront"),
             ("savoir", "futur simple", "saurai sauras saura saurons saurez sauront")]
    cards = [("Futur : radical + ai, as, a, ons, ez, ont. — offrir → j'offrirai", "المستقبل: الجذر + ai, as, a, ons, ez, ont", "⏭️"),
             ("Verbes en -re : on enlève le e. — perdre → je perdrai, prendre → je prendrai", "الأفعال المنتهية بـ re تحذف e: perdrai", "✂️"),
             ("Radicaux spéciaux : pouvoir → pourr-, savoir → saur-, faire → fer-, voir → verr-, devoir → devr-", "جذور خاصة يجب حفظها: pourr-, saur-, fer-, verr-, devr-", "🔑")]
    ch = [("Je prévoirai, tu prévoiras, il prévoira, nous prévoirons, vous ___", ["prévoirez", "prévoiriez", "prévoyez"], "prévoirez"),
          ("Je vivrai, tu vivras… elles ___", ["vivront", "vivraient", "vivrons"], "vivront"),
          ("Je joindrai, tu ___", ["joindras", "joindrais", "joindra"], "joindras")]
    rw = [("Le fermier tond les moutons et vend ensuite la laine.", "Le fermier tondra les moutons et vendra ensuite la laine."),
          ("La meute de loups poursuit le cerf.", "La meute de loups poursuivra le cerf."),
          ("Nous disent-ils la vérité ?", "Nous diront-ils la vérité ?"),
          ("Maman prend une grande marmite où elle fait mijoter sa soupe.", "Maman prendra une grande marmite où elle fera mijoter sa soupe."),
          ("Je vous rejoins dès que je le peux.", "Je vous rejoindrai dès que je le pourrai."),
          ("Tu apprends vite à skier.", "Tu apprendras vite à skier."), ("Nous ne craignons pas de perdre.", "Nous ne craindrons pas de perdre.")]
    grid = ["Pouvoir, il : il ___ = pourra", "Dire, tu : tu ___ = diras", "Prendre, nous : nous ___ = prendrons", "Rendre, je : je ___ = rendrai",
            "Savoir, vous : vous ___ = saurez", "Rire, nous : nous ___ = rirons", "Lire, ils : ils ___ = liront", "Cuire, je : je ___ = cuirai"]
    mix = [("ils ouvriront", "ouvriront", "ouvrir"), ("je conduirai", "conduirai", "conduire"), ("nous attendrons", "attendrons", "attendre"),
           ("je servirai", "servirai", "servir"), ("elle reprendra", "reprendra", "reprendre"), ("tu devras", "devras", "devoir"), ("il rira", "rira", "rire"),
           ("il couvrira", "couvrira", "couvrir"), ("vous parviendrez", "parviendrez", "parvenir"), ("tu mettras", "mettras", "mettre"),
           ("nous saurons", "saurons", "savoir"), ("ils pourront", "pourront", "pouvoir")]
    hu = [("Demain, je *pouvrai* venir.", "pourrai", "مستقبل pouvoir: pourr-"), ("Tu *prendreras* le bus.", "prendras", "prendre يحذف e: prendras"),
          ("Nous *faisserons* un gâteau.", "ferons", "مستقبل faire: fer-"), ("Elles *vivraient* longtemps dans cette ville l'an prochain.", "vivront", "المستقبل ont وليس الشرطي aient")]
    return lesson(lid, "3e groupe 2", "3e groupe : le futur simple", "المجموعة الثالثة: المستقبل البسيط", "⏭️", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), choose(lid, 3, ch, "Je corrige l'erreur", "أصحّح الخطأ"),
        rewrite(lid, 4, "Je mets la phrase au futur simple.", "حوّل الجملة إلى المستقبل البسيط.", rw),
        fill(lid, 5, grid, "La grille du futur", "شبكة المستقبل", "Je conjugue au futur simple.", "صرّف في المستقبل البسيط."), hunt(lid, 6, hu),
        speed(lid, 7, mix, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in mix}))])


def g3_pc():
    lid = "l4-cj24"
    verbs = [("prendre", "passé composé", "ai pris / as pris / a pris / avons pris / avez pris / ont pris"),
             ("descendre", "passé composé", "suis descendu(e) / es descendu(e) / est descendu(e) / sommes descendu(e)s / êtes descendu(e)s / sont descendu(e)s")]
    cards = [("Participes du 3e groupe : -ert (offert), -i (parti), -u (vu), -t (dit), -s (pris).", "أسماء المفعول في المجموعة الثالثة لها خمس نهايات", "🧩"),
             ("La plupart : avoir. Venir, descendre, naître, mourir… et les pronominaux : être.", "أغلبها مع avoir، وأفعال الحركة والانعكاسية مع être", "🚶"),
             ("Astuce : mets le participe au féminin pour entendre la lettre finale : prise → pris, dite → dit.", "حيلة: أنّث اسم المفعول لتسمع الحرف الأخير: prise ← pris", "💡")]
    bins = [("ert", "-ert", "offert", "🎁"), ("i", "-i", "parti", "🏃"), ("u", "-u", "vu", "👀"), ("t", "-t", "dit", "💬"), ("s", "-s", "pris", "✋")]
    parts = [("offrir → offert", "ert"), ("découvrir → découvert", "ert"), ("souffrir → souffert", "ert"), ("cueillir → cueilli", "i"), ("sortir → sorti", "i"),
             ("rire → ri", "i"), ("attendre → attendu", "u"), ("savoir → su", "u"), ("voir → vu", "u"), ("dire → dit", "t"), ("faire → fait", "t"),
             ("écrire → écrit", "t"), ("prendre → pris", "s"), ("mettre → mis", "s"), ("apprendre → appris", "s")]
    rel = [("Vous", "avez connu une période difficile."), ("Christophe Colomb", "a découvert l'Amérique en 1492."), ("Nous", "avons perdu nos clés."),
           ("Tu", "ne l'as pas reconnu ? C'est Julien."), ("Elles", "sont descendues voir l'accident."), ("Le professeur", "a repris la leçon."),
           ("J'", "ai cru que tu viendrais avec moi."), ("Les policiers", "ont poursuivi leurs enquêtes.")]
    ex2 = ["Vous (ne jamais faire) ___ face à vos craintes. = n'avez jamais fait", "L'enseignante (prédire) ___ la réussite de ses élèves. = a prédit",
           "Tu (pouvoir) ___ prouver ton innocence. = as pu", "Elle (mentir) ___ sur son âge réel. = a menti",
           "Maman nous (interdire) ___ de parler aux étrangers. = a interdit", "Mon père (naître) ___ en 1950. = est né",
           "L'arbuste (mourir) ___ parce qu'on a oublié de l'arroser. = est mort", "Elles (tenir) ___ le coup jusqu'à la fin. = ont tenu"]
    return _g3pc_tail(lid, cards, verbs, bins, parts, rel, ex2)


def _g3pc_tail(lid, cards, verbs, bins, parts, rel, ex2):
    rw = [("Elle offre à ses amies des souvenirs de l'Italie.", "Elle a offert à ses amies des souvenirs de l'Italie."),
          ("Tu atteins le plus haut niveau.", "Tu as atteint le plus haut niveau."), ("Ce jeune homme commettra une grave erreur.", "Ce jeune homme a commis une grave erreur."),
          ("Votre réputation se répand dans tout le pays.", "Votre réputation s'est répandue dans tout le pays."),
          ("Nous sourions à la vue de notre petite sœur.", "Nous avons souri à la vue de notre petite sœur."),
          ("Elles traduisent des textes en anglais.", "Elles ont traduit des textes en anglais."), ("Tu suis mes conseils à la lettre.", "Tu as suivi mes conseils à la lettre.")]
    hu = [("J'ai *prit* le bus ce matin.", "pris", "pris ← prise (حرف s)"), ("Elle a *dis* la vérité.", "dit", "dit ← dite (حرف t)"),
          ("Il a *ouvri* la porte.", "ouvert", "ouvrir ← ouvert"), ("Elles sont *descendu* voir l'accident.", "descendues", "مع être يتطابق مع الفاعل"),
          ("Nous avons *voyu* un film.", "vu", "voir ← vu")]
    mix = [("j'ai mis", "ai mis", "mettre"), ("elle s'est endormie", "s'est endormie", "s'endormir"), ("il a fait", "a fait", "faire"), ("tu as refait", "as refait", "refaire"),
           ("nous avons retenu", "avons retenu", "retenir"), ("il a pu", "a pu", "pouvoir"), ("il a permis", "a permis", "permettre"), ("il a abattu", "a abattu", "abattre"),
           ("vous avez appris", "avez appris", "apprendre"), ("ils sont intervenus", "sont intervenus", "intervenir")]
    return lesson(lid, "3e groupe 3", "3e groupe : le passé composé", "المجموعة الثالثة: الماضي المركّب", "✅", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), sort(lid, 3, bins, parts, "Je range les participes", "أصنّف أسماء المفعول"),
        match(lid, 4, rel), fill(lid, 5, ex2, "Au passé composé", "بالماضي المركّب"),
        rewrite(lid, 6, "Je mets la phrase au passé composé (attention aux accords).", "حوّل الجملة إلى الماضي المركّب وانتبه للتطابق.", rw), hunt(lid, 7, hu),
        speed(lid, 8, mix, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in mix}))])


def _rng(lid):
    import random
    return random.Random(lid)


def g3_imperatif():
    lid = "l4-cj25"
    verbs = [("offrir", "impératif présent", "offre offrons offrez"), ("partir", "impératif présent", "pars partons partez"),
             ("promettre", "impératif présent", "promets promettons promettez"), ("conduire", "impératif présent", "conduis conduisons conduisez"),
             ("maintenir", "impératif présent", "maintiens maintenons maintenez"), ("répondre", "impératif présent", "réponds répondons répondez"),
             ("prescrire", "impératif présent", "prescris prescrivons prescrivez")]
    cards = [("Impératif = présent sans sujet, 3 personnes : (tu) pars, (nous) partons, (vous) partez.", "الأمر = المضارع بلا ضمير، بثلاثة أشخاص فقط", "📣"),
             ("Les verbes comme offrir perdent le s : offre ! ouvre ! cueille !", "أفعال مثل offrir تحذف s مع tu: offre!", "🎁"),
             ("Négation : Ne + verbe + pas. — Ne cueillons pas ces roses.", "النفي: Ne … pas حول الفعل", "🚫"),
             ("Avec un pronom : trait d'union. — Dis-moi, crois-moi, prévenez-nous.", "مع الضمير: شَرطة بين الفعل والضمير", "🔗")]
    inf = [("Comme nous sommes prêts, descendons tout de suite.", "descendons", "descendre"), ("Faites cuire le gâteau 40 minutes.", "Faites", "faire"),
           ("La situation est critique, sachons garder notre calme.", "sachons", "savoir"), ("Prenez à gauche au carrefour.", "Prenez", "prendre"),
           ("Écris l'adresse au dos de l'enveloppe.", "Écris", "écrire"), ("Reconnaissez que vous vous êtes trompés.", "Reconnaissez", "reconnaître"),
           ("Suis les conseils de tes parents.", "Suis", "suivre"), ("Il pleut ! Courons nous mettre à l'abri.", "Courons", "courir"),
           ("Servez le chocolat chaud dans une tasse.", "Servez", "servir"), ("Si tu veux arriver à l'heure, pars immédiatement.", "pars", "partir")]
    ex3 = ["(Battre, tu) ___ le fer pendant qu'il est chaud. = Bats",
           "(Ne pas s'asseoir, vous) ___ sur ce banc ; il est sale. = Ne vous asseyez pas ; Ne vous assoyez pas",
           "Ne nous décourageons pas, (poursuivre) ___ nos efforts. = poursuivons",
           "(Faire, tu) ___ rissoler les aubergines à la poêle. = Fais", "Ayez confiance en vous, (sourire) ___. = souriez",
           "Julien, sois vigilant et (prévenir) ___-nous. = préviens", "(Ne pas cueillir, nous) ___ ces roses. = Ne cueillons pas",
           "(Croire, tu) ___-moi, ce roman est passionnant. = Crois", "(Traduire, nous) ___ ce document en français. = Traduisons"]
    rw = [("Vous devez attendre l'arrivée des secours.", "Attendez l'arrivée des secours."),
          ("Tu dois soutenir ta meilleure amie.", "Soutiens ta meilleure amie."),
          ("Nous devons ouvrir les fenêtres pour aérer la salle.", "Ouvrons les fenêtres pour aérer la salle."),
          ("Tu ne dois pas confondre le nom des deux villes.", "Ne confonds pas le nom des deux villes."),
          ("Nous ne devons pas perdre notre sang-froid.", "Ne perdons pas notre sang-froid."),
          ("Tu dois éteindre la lumière.", "Éteins la lumière."), ("Vous devez relire le passage.", "Relisez le passage.")]
    hu = [("*Offres* un cadeau à ta sœur !", "Offre", "offrir مع tu في الأمر بلا s"), ("*Ouvres* la fenêtre, s'il te plaît.", "Ouvre", "ouvrir مع tu في الأمر بلا s"),
          ("*Confond* pas les deux villes.", "Ne confonds", "النفي Ne … pas، وconfondre: confonds"), ("*Prenons-toi* à gauche !", "Prends", "مع tu: Prends")]
    return lesson(lid, "3e groupe 4", "3e groupe : l'impératif présent", "المجموعة الثالثة: الأمر", "📣", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs, "Le tableau de l'impératif", "جدول الأمر"),
        choose(lid, 3, [(f"{s} → infinitif de « {v} » ?", _rng(lid).sample(sorted({i for _, _, i in inf} - {a}), 2) + [a], a) for s, v, a in inf], "Quel est l'infinitif ?", "ما المصدر؟"),
        fill(lid, 4, ex3, "À l'impératif présent", "بالأمر"),
        rewrite(lid, 5, "Je donne un ordre : Tu ne dois pas mettre… → Ne mets pas…", "حوّل إلى صيغة الأمر: Tu dois… ← فعل أمر", rw, "Je donne des ordres", "أُعطي الأوامر"),
        hunt(lid, 6, hu), speed(lid, 7, inf, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in inf}))])


def g3_imparfait():
    lid = "l4-cj26"
    verbs = [("boire", "imparfait", "buvais buvais buvait buvions buviez buvaient"), ("peindre", "imparfait", "peignais peignais peignait peignions peigniez peignaient"),
             ("faire", "imparfait", "faisais faisais faisait faisions faisiez faisaient"), ("pouvoir", "imparfait", "pouvais pouvais pouvait pouvions pouviez pouvaient")]
    cards = [("Imparfait : radical de « nous » au présent + ais, ais, ait, ions, iez, aient.", "الماضي الناقص: جذر nous في المضارع + النهايات", "🌫️"),
             ("nous buvons → je buvais ; nous peignons → je peignais ; nous faisons → je faisais", "buvons ← buvais، peignons ← peignais", "🔑"),
             ("Il sert à décrire, à raconter une habitude ou une action en cours dans le passé.", "يُستعمل للوصف والعادة والحدث الجاري في الماضي", "📖")]
    ch = [("Les habitants ___ que le temps ne change brusquement.", ["craignait", "craignaient", "craignais"], "craignaient"),
          ("Quand nous ___ en vacances, papa conduisait.", ["partaient", "partais", "partions"], "partions"),
          ("Le carrossier ___ l'aile de la voiture.", ["repeigné", "repeignait", "repeignais"], "repeignait"),
          ("Pour calmer sa toux, il ___ du sirop.", ["buvaient", "buvait", "buvais"], "buvait"),
          ("Isabelle et moi ___ en Camargue.", ["se rendaient", "vous rendiez", "nous rendions"], "nous rendions"),
          ("Maurice et toi ___ toujours à la même table.", ["nous asseyions", "vous asseyiez", "s'asseyaient"], "vous asseyiez"),
          ("Cette proposition ne me ___ pas.", ["convenais", "convenaient", "convenait"], "convenait")]
    val = [("Les enfants dormaient tranquillement quand un bruit se fit entendre.", "dormaient", "action inachevée dans le passé"),
           ("La grande route descendait en ligne droite jusqu'au village.", "descendait", "description"),
           ("Tous les matins, tu faisais ton sport.", "faisais", "habitude"), ("Je voulais vous demander votre avis.", "voulais", "demande atténuée"),
           ("Ah ! si je le pouvais, je supprimerais toutes les injustices.", "pouvais", "supposition avec si"),
           ("Tous les lundis, nous allions à la piscine.", "allions", "habitude")]
    ex3 = ["Le ciel était sombre et l'on (ne plus attendre) ___ que la pluie. = n'attendait plus",
           "Autrefois, les sportifs (combattre) ___ la fatigue avec endurance. = combattaient",
           "Je (ne pas savoir) ___ que le puy de Dôme était un volcan. = ne savais pas",
           "Les habitants (vivre) ___ derrière des murailles d'où ils (voir) ___ venir les visiteurs. = vivaient | voyaient",
           "Tu étais confiante, tu (croire) ___ en tes capacités. = croyais",
           "Tous les soirs, l'animateur (conclure) ___ l'émission. = concluait",
           "Pierre et toi (entreprendre) ___ souvent de longs voyages. = entrepreniez",
           "J' (écrire) ___ toujours plusieurs brouillons. = écrivais"]
    rw = [("Je faisais de grands détours. (Vous)", "Vous faisiez de grands détours."), ("Il souffrait d'une tendinite. (Je)", "Je souffrais d'une tendinite."),
          ("Tu reproduisais tous les détails. (Nous)", "Nous reproduisions tous les détails."), ("Vous entendiez le bruit du torrent. (Ils)", "Ils entendaient le bruit du torrent."),
          ("Elle écrivait à sa cousine. (Nous)", "Nous écrivions à notre cousine."), ("Je connaissais les noms. (Vous)", "Vous connaissiez les noms."),
          ("Ils ne prenaient jamais la bonne direction. (Je)", "Je ne prenais jamais la bonne direction.")]
    mix = [("je buvais", "buvais", "boire"), ("tu peignais", "peignais", "peindre"), ("il faisait", "faisait", "faire"), ("nous voyions", "voyions", "voir"),
           ("vous croyiez", "croyiez", "croire"), ("ils écrivaient", "écrivaient", "écrire"), ("je prenais", "prenais", "prendre"), ("on vivait", "vivait", "vivre"),
           ("tu savais", "savais", "savoir"), ("elles craignaient", "craignaient", "craindre")]
    return lesson(lid, "3e groupe 5", "3e groupe : l'imparfait", "المجموعة الثالثة: الماضي الناقص", "🌫️", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), choose(lid, 3, ch, "Le verbe bien conjugué", "الفعل المصرَّف صحيحاً"),
        valeur(lid, 4, val), fill(lid, 5, ex3, "À l'imparfait", "بالماضي الناقص"),
        rewrite(lid, 6, "Je récris la phrase avec le pronom indiqué.", "أعد كتابة الجملة بالضمير المذكور.", rw, "Je change le sujet", "أغيّر الفاعل"),
        speed(lid, 7, mix, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in mix}))])


def g3_pqp():
    lid = "l4-cj27"
    verbs = [("prendre", "plus-que-parfait", "avais pris / avais pris / avait pris / avions pris / aviez pris / avaient pris"),
             ("partir", "plus-que-parfait", "étais parti(e) / étais parti(e) / était parti(e) / étions parti(e)s / étiez parti(e)s / étaient parti(e)s")]
    cards = [("Plus-que-parfait : avoir ou être à l'imparfait + participe passé. — J'avais lu. Ils étaient partis.", "الماضي الأسبق: avoir أو être في الماضي الناقص + اسم المفعول", "⏪"),
             ("Même participe qu'au passé composé : pris, mis, vu, dit, offert, parti…", "اسم المفعول نفسه الذي في الماضي المركّب", "🧩")]
    tab = [("Tu avais clos", "avais clos", "clore"), ("L'eau avait bouilli", "avait bouilli", "bouillir"), ("Pierre et moi avions servi", "avions servi", "servir"),
           ("J'avais cueilli", "avais cueilli", "cueillir"), ("Les jumeaux étaient nés", "étaient nés", "naître"), ("J'avais pu", "avais pu", "pouvoir"),
           ("Les élèves s'étaient tus", "s'étaient tus", "se taire"), ("Ton ami et toi aviez ri", "aviez ri", "rire"), ("Le motard avait mis son casque", "avait mis", "mettre"),
           ("La tortue avait vécu 50 ans", "avait vécu", "vivre"), ("Les randonneurs avaient aperçu une biche", "avaient aperçu", "apercevoir"),
           ("Mon cousin avait dû suivre des cours", "avait dû", "devoir")]
    ex2 = ["J' (lire) ___ tous les textes ; celui-ci m' (plaire) ___ le plus. = avais lu | avait plu",
           "Cette tempête (détruire) ___ de nombreuses plantations. = avait détruit",
           "Papa (prendre) ___ les outils nécessaires. = avait pris",
           "Les garçons (s'enfuir) ___ après avoir entendu ce bruit. = s'étaient enfuis",
           "Le guide et moi (parcourir) ___ des kilomètres. = avions parcouru",
           "Tu (ne pas comprendre) ___ pourquoi ils (ne pas venir) ___. = n'avais pas compris | n'étaient pas venus",
           "La bergère (traire) ___ la chèvre de bon matin. = avait trait",
           "Nous étions de mauvaise humeur parce que nous (perdre) ___ le match. = avions perdu"]
    ex4 = ["La chanteuse (produire) ___ des sons si aigus que les verres s'étaient brisés. = avait produit",
           "Les employés (partir) ___ en déplacement durant plus d'un an. = étaient partis",
           "Nous (écrire) ___ un article sur la tolérance. = avions écrit",
           "La pierre de Rosette (permettre) ___ de déchiffrer les hiéroglyphes. = avait permis",
           "Tu (devenir) ___ une chirurgienne remarquable. = étais devenue",
           "J' (offrir) ___ des bons d'achat à mes clients. = avais offert",
           "Mes collègues et moi (découvrir) ___ un atelier à Marseille. = avions découvert"]
    return lesson(lid, "3e groupe 6", "3e groupe : le plus-que-parfait", "المجموعة الثالثة: الماضي الأسبق", "⏪", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs),
        choose(lid, 3, [(f"{s} → infinitif ?", _rng(lid).sample(sorted({i for _, _, i in tab} - {a}), 2) + [a], a) for s, v, a in tab[:8]], "Quel est l'infinitif ?", "ما المصدر؟"),
        fill(lid, 4, ex2, "Au plus-que-parfait", "بالماضي الأسبق"), fill(lid, 5, ex4, "Au plus-que-parfait (2)", "بالماضي الأسبق (2)"),
        speed(lid, 6, tab, "Défi chrono : quel infinitif ?", "تحدّي السرعة: ما المصدر؟", 60, 10, pool=sorted({t for _, _, t in tab}))])


def g3_conditionnel():
    lid = "l4-cj28"
    verbs = [("voir", "conditionnel présent", "verrais verrais verrait verrions verriez verraient"),
             ("recevoir", "conditionnel présent", "recevrais recevrais recevrait recevrions recevriez recevraient"),
             ("prendre", "conditionnel présent", "prendrais prendrais prendrait prendrions prendriez prendraient")]
    cards = [("Conditionnel : radical du futur + ais, ais, ait, ions, iez, aient.", "الشرطي: جذر المستقبل + نهايات الماضي الناقص", "🤔"),
             ("je verrai → je verrais ; je pourrai → je pourrais ; je ferai → je ferais", "إذا عرفت المستقبل عرفت الشرطي", "🔑")]
    ch = [("Je me doutais que tu ___ le problème différemment.", ["percevrait", "percevrez", "percevrais", "percevras"], "percevrais"),
          ("Nous nous ___ à même le sol s'il était propre.", ["étendriez", "étendrions", "étendrais", "étendrons"], "étendrions"),
          ("Si tes sœurs révisaient, elles ___ la réponse.", ["connaissaient", "connaîtrez", "connaissez", "connaîtraient"], "connaîtraient"),
          ("Si j'avais des lunettes, je ___ mieux le monde.", ["verrez", "verrai", "verrais", "verriez"], "verrais"),
          ("Vous ___ des compliments si vous souriiez.", ["recevriez", "recevez", "recevrez", "recevrais"], "recevriez"),
          ("Si l'entraîneur nous donnait du répit, nous ___ notre souffle.", ["reprendrons", "reprenons", "reprendriez", "reprendrions"], "reprendrions"),
          ("Si je l'adoptais, ce chat m'___.", ["appartient", "appartiendrait", "appartiendra", "appartiendrez"], "appartiendrait"),
          ("Tu ___ ta mère si elle te le demandait.", ["rejoins", "rejoignais", "rejoindrais", "rejoindras"], "rejoindrais")]
    hu = [("Avec ton aide, j'*atteindrez* les verres sur l'étagère.", "atteindrais", "مع je: ais"),
          ("Maman *sévirions* comme quand nous étions jeunes.", "sévirait", "maman = elle: ait"),
          ("Il *pleuvrions*, et nous resterions à la maison.", "pleuvrait", "il: ait"),
          ("Papa et toi *buvriez* du chocolat chaud.", "boiriez", "boire ← boir-: boiriez"),
          ("Au lit, maman nous *surprendait* à bavarder.", "surprendrait", "surprendre ← surprendr-")]
    ex3 = ["Tu disais que tu me (soutenir) ___ toujours. = soutiendrais", "Nous avions le pressentiment que vous (détruire) ___ la cabane. = détruiriez",
           "Nous (se permettre) ___ de corriger tes fautes. = nous permettrions", "J'étais sûre qu'Anne et Marie (parvenir) ___ à terminer la course. = parviendraient",
           "Nous (lire) ___ ce livre si nous avions le temps. = lirions", "Vous (prévoir) ___ des mesures de sécurité. = prévoiriez",
           "On (paraître) ___ lâches si on fuyait tout de suite. = paraîtrait ; paraitrait", "Elle savait que j' (acquérir) ___ des qualités. = acquerrais"]
    rw = [("Tu produiras des preuves aux investigateurs.", "Tu produirais des preuves aux investigateurs."),
          ("Contraignons Serge à dire la vérité.", "Nous contraindrions Serge à dire la vérité."), ("Je devenais nerveux en sa présence.", "Je deviendrais nerveux en sa présence."),
          ("Ils ont commis une grosse erreur.", "Ils commettraient une grosse erreur."), ("Sache le prévenir en cas de souci.", "Tu saurais le prévenir en cas de souci."),
          ("Je m'abstenais de dire des sottises.", "Je m'abstiendrais de dire des sottises.")]
    return lesson(lid, "3e groupe 7", "3e groupe : le conditionnel présent", "المجموعة الثالثة: الشرطي", "🤔", [
        rules(lid, 1, cards, "Je retiens", "أتذكّر"), table(lid, 2, verbs), choose(lid, 3, ch, "Choisis la bonne réponse", "اختر الإجابة الصحيحة"),
        hunt(lid, 4, hu, "La lettre à ma petite sœur", "الرسالة إلى أختي الصغيرة"), fill(lid, 5, ex3, "Au conditionnel présent", "بالشرطي"),
        rewrite(lid, 6, "Je mets la phrase au conditionnel présent.", "حوّل الجملة إلى الشرطي.", rw)])


def g3_bilan():
    lid = "l4-cj29"
    tab = [("L'après-midi, elle fait les courses.", "fait", "présent"), ("Il nous avait prévenus par un texto.", "avait prévenu", "plus-que-parfait"),
           ("Sauriez-vous l'heure d'arrivée ?", "Sauriez", "conditionnel présent"), ("S'il écrivait en hiver, son livre paraîtrait en été.", "écrivait", "imparfait"),
           ("Mon frère m'a pris les clés de la main.", "a pris", "passé composé"), ("Ils offrent une récompense.", "offrent", "présent"),
           ("Je vous rendrai visite la semaine prochaine.", "rendrai", "futur simple"), ("Ouvrons les fenêtres !", "Ouvrons", "impératif présent")]
    ex2 = ["On m' (interdire – plus-que-parfait) ___ de jouer avec le feu. = avait interdit",
           "Je (ne pas parvenir – présent) ___ à comprendre ce texte. = ne parviens pas",
           "(Ouvrir – impératif, vous) ___ grand vos oreilles ! = Ouvrez",
           "On l' (détenir – passé composé) ___ parce qu'il (commettre – plus-que-parfait) ___ un vol. = a détenu | avait commis",
           "J' (atteindre – futur simple) ___ un jour mon but. = atteindrai", "Si j'avais le temps, je (lire – conditionnel) ___ des romans policiers. = lirais",
           "Il (relire – passé composé) ___ ses réponses. = a relu", "Nous (rejoindre – futur simple) ___ l'équipe l'année prochaine. = rejoindrons"]
    rw = [("Je construis ma propre maison.", "Nous construisons notre propre maison."), ("Tu m'offres ta nouvelle guitare.", "Vous m'offrez votre nouvelle guitare."),
          ("Il peint le mur de sa chambre.", "Ils peignent le mur de leur chambre."), ("Elle court pour entretenir sa forme.", "Elles courent pour entretenir leur forme."),
          ("Je m'inscrirais au tournoi si c'était possible.", "Nous nous inscririons au tournoi si c'était possible."),
          ("Il n'apprendra jamais les maths de cette façon.", "Ils n'apprendront jamais les maths de cette façon.")]
    ex4 = ["D'habitude, les écoles (ouvrir) ___ leurs portes en septembre. = ouvrent", "Si j'étais architecte, je (construire) ___ le plus beau bâtiment. = construirais",
           "Cet artiste (peindre) ___ cette toile en trois ans. = a peint", "Vous (inscrire) ___ le nom de Marie la semaine prochaine. = inscrirez",
           "Je (courir) ___ tous les matins. = cours", "(Cueillir, vous) ___ des fleurs pour décorer la maison. = Cueillez",
           "L'année dernière, ma grand-mère (accueillir) ___ ses amies chaque semaine. = accueillait",
           "Votre effort sera vain ! Vous (ne pas convaincre) ___ vos parents. = ne convaincrez pas"]
    mix = tab + [("nous peignons", "peignons", "présent"), ("tu verrais", "verrais", "conditionnel présent"), ("ils étaient partis", "étaient partis", "plus-que-parfait"),
                 ("je buvais", "buvais", "imparfait"), ("vous ferez", "ferez", "futur simple"), ("prends !", "prends", "impératif présent")]
    return lesson(lid, "Bilan 5", "Bilan : les verbes du 3e groupe", "مراجعة: أفعال المجموعة الثالثة", "🏁", [
        identify(lid, 1, tab), fill(lid, 2, ex2, "Au temps demandé", "بالزمن المطلوب"),
        rewrite(lid, 3, "Je mets le sujet au pluriel et je fais les changements.", "حوّل الفاعل إلى الجمع وغيّر ما يلزم.", rw, "Au pluriel", "إلى الجمع"),
        fill(lid, 4, ex4, "Le temps qui convient", "الزمن المناسب", "Je choisis le temps qui convient.", "اختر الزمن المناسب للمعنى."),
        speed(lid, 5, mix, "Défi final : le 3e groupe", "التحدّي النهائي: المجموعة الثالثة", 60, 12)], kind="bilan")


def build():
    """Mission Conjugaison — all 29 chapters of the book, in order."""
    return [rappel(), ae_present(), ae_imparfait_pc(), ae_pqp(), ae_conditionnel(), ae_bilan(),
            g1_present(), g1_imparfait_pc(), g1_pqp(), g1_conditionnel(), g1_bilan(),
            g2_present(), g2_imparfait_pc(), g2_pqp(), g2_conditionnel(), g2_bilan(),
            av_present(), av_imparfait_pc(), av_pqp(), av_conditionnel(), av_bilan(),
            g3_present(), g3_futur(), g3_pc(), g3_imperatif(), g3_imparfait(), g3_pqp(), g3_conditionnel(), g3_bilan()]
