"""
source_15.py — s15 · ORIGINAL SHRI MATAJI — MONTÉE DE LA KUNDALINI (NIRMALA YOGA 22, 1984)
Série SOURCE ANNEXE FIABLE · généré depuis l'analyse gravée (Fable, 12 juil 2026).
RĂšgle : zĂ©ro invention — tout champ provient de la planche ou d'un recoupement datĂ©.
⭐ PIÈCE MAJEURE : seule planche de la série s qui soit un ORIGINAL de Shri Mataji.
"""
from dataclasses import dataclass, field, asdict
import json

# ── SOCLE COMMUN (passe U6c — imbrication, GO Ben 13 juil 2026, 23h35) ────
# socle_corpus.py = clé de voûte du paquet corpus/ (types partagés · registre
# · GRAPHE des jonctions · VERDICTS D1-D6). Loi 2 du contrat : les jonctions
# CANONIQUES entre piùces (dNN/sNN) vivent UNE SEULE FOIS dans GRAPHE — la
# liste locale `jonctions` (cible/nature) reste une NOTE DE LECTURE de la
# planche. ⭐ s15 = seule piÚce de la série s avec auteur_shri_mataji=True :
# rĂ©fĂ©rence de STYLE pour authentifier les tracĂ©s d01→d22 (recoupement
# prioritaire avec d20, mĂȘme famille de tracĂ©s originaux).
# Loi 3 : aucun verdict recopiĂ© — pointer VERDICTS[id].
ID_CORPUS = "s15"
try:
    from socle_corpus import GRAPHE, VERDICTS, SOURCES as REGISTRE_SOURCES
    JONCTIONS_SOCLE = [j for j in GRAPHE if ID_CORPUS in (j.a, j.b)]
    MODE_ILOT = False
except ImportError:  # exécution isolée : le module reste lisible en ßlot
    GRAPHE, VERDICTS, REGISTRE_SOURCES = [], {}, {}
    JONCTIONS_SOCLE, MODE_ILOT = [], True

@dataclass
class Inscription:
    texte: str
    zone: str
    statut: str = "\U0001f7e2"

@dataclass
class Jonction:
    cible: str
    nature: str

@dataclass
class Source:
    sid: str = "s15"
    titre: str = "ORIGINAL SHRI MATAJI — MONTÉE DE LA KUNDALINI (NIRMALA YOGA 22, 1984)"
    type_source: str = "croquis Ă  main levĂ©e, encre sur papier — scan de la revue officielle Nirmala Yoga"
    origine: str = "Nirmala Yoga, Issue 22 (July-August 1984), Page 11"
    auteur_shri_mataji: bool = True   # ⭐ ORIGINAL de Sa main — unique dans la sĂ©rie s
    fiabilite: str = "\U0001f7e2\U0001f7e2 source primaire datée et publiée (Nirmala Yoga n°22, juil.-août 1984, p. 11) · \U0001f7e1 numérisation indirecte, date exacte du tracé inconnue ('198x-0000')"

    inscriptions: list = field(default_factory=lambda: [
        Inscription("198x-0000 Original Drawing on the Raising of Ku\u1e47\u1e0dalin\u012b published in "
                    "Nirmala Yoga, Issue 22 (July-August 1984), Page 11", "lĂ©gende — verbatim"),
    ])

    caracteristiques: list = field(default_factory=lambda: [
        "trait rapide et superposĂ© — ligne serpentine verticale",
        "succession de boucles/nƓuds autour de trois Ă©tages nouĂ©s (chakras)",
        "évasement en bas : départ large, type triangle sacré",
        "ouverture en haut : grande boucle libre = percée vers le Sahasrara",
        "centres dessinés comme des pelotes denses, boucles enroulées autour",
        "STATUT À PART : rĂ©fĂ©rence de style pour authentifier les dessins d01-d22",
    ])

    jonctions: list = field(default_factory=lambda: [
        Jonction("d20", "DOUBLE CORDE — mĂȘme famille de tracĂ©s originaux, recoupement PRIORITAIRE"),
        Jonction("d09", "FORMATION DU CHAKRA — mĂȘme famille de tracĂ©s (pelotes/nƓuds)"),
        Jonction("s08", "spirale 3œ tours — version pĂ©dagogique du mĂȘme sujet"),
        Jonction("d02", "THE HAPPENING — montĂ©e et percĂ©e, version annotĂ©e"),
    ])

    en_attente: list = field(default_factory=lambda: [
        "\U0001f7e1 date exacte du tracé inconnue (légende '198x-0000')",
        "comparaison de style avec d01-d22 — à mener en PHASE RÉVISION CODES",
    ])

    def rapport(self) -> str:
        etat_socle = ("ßlot (socle_corpus non chargé)" if MODE_ILOT
                      else f"imbriquĂ© — {len(JONCTIONS_SOCLE)} jonction(s) canoniques au GRAPHE")
        return "\n".join([
            f"[{self.sid}] {self.titre}",
            f"  origine : {self.origine}",
            f"  de la main de Shri Mataji : {self.auteur_shri_mataji} ⭐",
            f"  fiabilité : {self.fiabilite}",
            f"  jonctions : {len(self.jonctions)}",
            f"  SOCLE : {etat_socle}",
        ])

    def to_json(self) -> str:
        data = asdict(self)
        data["id_corpus"] = ID_CORPUS
        data["jonctions_canoniques"] = [asdict(j) for j in JONCTIONS_SOCLE]
        data["mode_ilot"] = MODE_ILOT
        return json.dumps(data, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    print(Source().rapport())