from pptx import Presentation
from pptx.util import Inches
from lxml import etree
from copy import deepcopy
prs=Presentation("/tmp/out5.pptx")
# Fix duplicated text
for idx in [69,80]:
 s=prs.slides[idx]
 for sh in s.shapes:
  if sh.name=="CuadroTexto 15":
   for p in sh.text_frame.paragraphs:
    first=True
    for r in p.runs:
     if first: r.text="Orador principal"; first=False
     else: r.text=""
def dup_slide(prs,src_idx,ins_idx):
 src=prs.slides[src_idx]
 ns=prs.slides.add_slide(src.slide_layout)
 for sh in src.shapes:
  ns.shapes._spTree.append(deepcopy(sh._element))
 for rel in src.part.rels.values():
  if "image" in rel.reltype:
   ns.part.rels.get_or_add(rel.reltype,rel._target)
 lst=prs.slides._sldIdLst
 el=lst[-1]; lst.remove(el); lst.insert(ins_idx,el)
 return ns
# Paula SOY at 113
dup_slide(prs,69,113)
print("Paula SOY at 114")
# +1 slide, all indices after 113 shift by 1
# Add 4 Paula content slides at 114,115,116,117
paula=Presentation("/tmp/paula_pres.pptx")
for i in range(4):
 ns=prs.slides.add_slide(prs.slide_layouts[6])
 for sh in paula.slides[i].shapes:
  ns.shapes._spTree.append(deepcopy(sh._element))
 for rel in paula.slides[i].part.rels.values():
  if "image" in rel.reltype:
   ns.part.rels.get_or_add(rel.reltype,rel._target)
 lst=prs.slides._sldIdLst
 el=lst[-1]; lst.remove(el); lst.insert(114+i,el)
print("Paula 4 content slides added")
# Adrian SOY: original idx 80, but 5 slides inserted before idx 113
# 80 < 113 so Adrian still at 80
dup_slide(prs,80,118)
print("Adrian SOY at 119")
# Adrian content: PDF image at 119
aslide=prs.slides.add_slide(prs.slide_layouts[6])
aslide.shapes.add_picture("/tmp/adrian_onepage.png",0,0,prs.slide_width,prs.slide_height)
lst=prs.slides._sldIdLst
el=lst[-1]; lst.remove(el); lst.insert(119,el)
print("Adrian content added")
prs.save("/tmp/out7.pptx")
print(f"Final: {len(prs.slides)} slides")
# Verify
prs2=Presentation("/tmp/out7.pptx")
for i in range(112,122):
 s=prs2.slides[i]
 tx=[sh.text_frame.text[:40].replace(chr(10)," ") for sh in s.shapes if hasattr(sh,"text_frame") and sh.text_frame.text.strip()]
 print(f"Slide {i+1}: {tx}")
