"""
source_05.py — s05 · QU'EST-CE QUE LE SAHAJA YOGA — SACRUM & ÉVEIL
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é.
"""
from dataclasses import dataclass, field, asdict
import json

# ── SOCLE COMMUN (passe U6a — imbrication, GO Ben 13 juil 2026, 23h21) ────
# 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 (elle seule garde les liens hors-graphe : ici le talk daté
# 1978-09-25 Caxton Hall, qui n'est pas une pièce dNN/sNN du corpus).
# Loi 3 : aucun verdict recopié — pointer VERDICTS[id].
ID_CORPUS = "s05"
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 = "s05"
    titre: str = "QU'EST-CE QUE LE SAHAJA YOGA — SACRUM & ÉVEIL DE LA KUNDALINI"
    type_source: str = "collage pédagogique 'WHAT IS SAHAJA YOGA?' (capture web 1223×720, 4 panneaux)"
    origine: str = "montage moderne anonyme · cite Meta Modern Era (livre de Shri Mataji, 1995) · planche anatomique ©ADAM insérée"
    auteur_shri_mataji: bool = False
    fiabilite: str = "\U0001f7e2 citation sourcée (Meta Modern Era) + iconographie SY standard · \U0001f7e1 montage moderne anonyme, capture indirecte"

    inscriptions: list = field(default_factory=lambda: [
        Inscription("WHAT IS SAHAJA YOGA?", "titre du collage"),
        Inscription("Sahaja Yoga is the spontaneous union of the individual consciousness with the "
                    "all-pervading Divine Power through the awakening of the residual power of the "
                    "Kundalini… in the triangular bone at the base of the spine, called the sacrum, "
                    "the sacred bone. — H.H Shri Mataji Nirmala Devi | Meta Modern Era",
                    "panneau 2 — citation-définition verbatim"),
        Inscription("superior articular facet · sacral canal · ala · spinous tubercles · dorsal sacral "
                    "foramina · coccyx (tail bone) · sacral hiatus", "panneau 1 — planche médicale ©ADAM"),
        Inscription("Sahasrara Chakra", "panneau 4 — percée de la fontanelle en 3 étapes numérotées"),
    ])

    caracteristiques: list = field(default_factory=lambda: [
        "panneau 1 : anatomie réelle du sacrum — l'os triangulaire, siège de la Kundalini",
        "panneau 2 : définition + triangle orangé à spirale (Kundalini dans le Mooladhara)",
        "panneau 3 : méditant + trajet Kundalini + correspondances doigts↔chakras numérotées",
        "panneau 4 : Agnya (1) → zone limbique (2) → fontanelle percée = Réalisation + brise fraîche (3)",
        "valeur : relie l'anatomie RÉELLE (sacrum) au système subtil — pont science/doctrine",
    ])

    jonctions: list = field(default_factory=lambda: [
        Jonction("d02", "THE HAPPENING — même montée et percée de la fontanelle"),
        Jonction("d04", "carte-mère — même système complet, sacrum = triangle 3½ coil"),
        Jonction("d22", "mains↔chakras — panneau 3 = même doctrine des doigts"),
        Jonction("s01", "même famille de planches pédagogiques sahajayoga.org"),
        Jonction("talk 1978-09-25 Caxton Hall", "colonne vertébrale + os triangulaire — déjà recoupé en série d"),
    ])

    en_attente: list = field(default_factory=lambda: [
        "\U0001f7e1 auteur du montage non identifié",
        "\U0001f7e1 page exacte de Meta Modern Era à référencer",
    ])

    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"  inscriptions : {len(self.inscriptions)} · 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())