from reportlab.pdfgen import canvas

class NumberedCanvas(canvas.Canvas):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._saved_page_states = []

    def showPage(self):
        self._saved_page_states.append(dict(self.__dict__))
        self._startPage()

    def save(self):
        num_pages = len(self._saved_page_states)
        for state in self._saved_page_states:
            self.__dict__.update(state)
            self.draw_page_number(num_pages)
            canvas.Canvas.showPage(self)
        canvas.Canvas.save(self)

    def draw_page_number(self, page_count):
        if self._pageNumber == 1:
            return # Skip cover page
        self.saveState()
        self.setFont("Helvetica", 9)
        self.setFillColorRGB(0.4, 0.45, 0.5)
        # Header
        self.drawString(36, 580, "1:12 SCALE THREE-STORY DOLLHOUSE — MASTER ARCHITECTURAL PLANS")
        self.setStrokeColorRGB(0.8, 0.82, 0.85)
        self.setLineWidth(0.5)
        self.line(36, 574, 756, 574)
        # Footer
        self.line(36, 40, 756, 40)
        self.drawString(36, 28, "Carcass: 32\" W × 12\" D × 27\" H | Scale 1:12 | 1/4\" Baltic Birch Plywood")
        page_str = f"Page {self._pageNumber} of {page_count}"
        self.drawRightString(756, 28, page_str)
        self.restoreState()

print("NumberedCanvas defined successfully!")
