from pptx import Presentation
from pptx.opc.constants import RELATIONSHIP_TYPE as RT
from lxml import etree
from copy import deepcopy
import copy
def dup_slide(prs,src_idx,insert_idx):
 src=prs.slides[src_idx]
 layout=src.slide_layout
 new_slide=prs.slides.add_slide(layout)
 for shape in src.shapes:
  el=deepcopy(shape._element)
  new_slide.shapes._spTree.append(el)
 for rel in src.part.rels.values():
  if "image" in rel.reltype or "media" in rel.reltype:
   new_slide.part.rels.get_or_add(rel.reltype,rel._target)
 # Move to insert position
 lst=prs.slides._sldIdLst
 el=lst[-1]
 lst.remove(el)
 lst.insert(insert_idx,el)
 return new_slide
prs=Presentation("/tmp/out5.pptx")
print(f"Before: {len(prs.slides)} slides")
# Duplicate Paula SOY to position 113 (after schedule table)
dup_slide(prs,69,113)
print("Paula SOY duplicated")
# Duplicate Adrian SOY to position after Paula content
# Paula SOY is at 113, her 4 content slides will be 114-117
# So Adrian SOY goes at 118
# But first add Paula content slides
paula=Presentation("/tmp/paula_pres.pptx")
for i in range(len(paula.slides)):
 layout=prs.slide_layouts[6]
 ns=prs.slides.add_slide(layout)
 for shape in paula.slides[i].shapes:
  el=deepcopy(shape._element)
  ns.shapes._spTree.append(el)
 lst=prs.slides._sldIdLst
 el=lst[-1]
 lst.remove(el)
 lst.insert(114+i,el)
print(f"Added {len(paula.slides)} Paula content slides")
# Adrian SOY at 118 (after Paula SOY+4 content)
# Adrian is now at index 81+1(paula soy)+4(paula content)=86
dup_slide(prs,86,118)
print("Adrian SOY duplicated")
# Add Adrian content: PDF as full-slide image at 119
layout=prs.slide_layouts[6]
aslide=prs.slides.add_slide(layout)
from pptx.util import Inches
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/out6.pptx")
print(f"Final: {len(prs.slides)} slides")
