import json from db.supports import connect_support, ensure_document_pages_schema from ..labels.element_kind_labels import element_default_attributes def add_document_element(slug: str, kind: str, page_id: int, parent_id: int | None = None) -> int: """Ajoute un élément à une page précise, en fin de son groupe de frères (même parent_id — NULL pour un élément top-niveau, l'id d'une rangée pour un enfant de cette rangée, voir docs/plan/PLAN.md). Attributs de départ posés via element_default_attributes(kind). Le groupe de frères (parent_id) est TOUJOURS cherché à l'intérieur de cette même page — deux pages peuvent chacune avoir une rangée dont les enfants portent des id `parent_id` différents, jamais de confusion possible entre pages.""" ensure_document_pages_schema(slug) conn = connect_support(slug) max_row = conn.execute( "SELECT MAX(order_index) AS m FROM _document_elements WHERE page_id = ? AND parent_id IS ?", (page_id, parent_id), ).fetchone() order_index = (max_row["m"] or 0) + 1 if max_row and max_row["m"] is not None else 0 conn.execute( "INSERT INTO _document_elements (page_id, parent_id, kind, order_index, attributes) VALUES (?, ?, ?, ?, ?)", (page_id, parent_id, kind, order_index, json.dumps(element_default_attributes(kind))), ) element_id = int(conn.execute("SELECT last_insert_rowid() AS id").fetchone()["id"]) conn.commit() conn.close() return element_id