# -*- coding: utf-8 -*-
"""
Sincroniza posición y tamaño de marcos de texto en Scribus 1.7+

- Marco origen: nombre que CONTENGA "GEOM_ORIGEN"
- Marcos destino: nombre que CONTENGA "GEOM_SYNC_"

El texto NO se modifica.
"""

import scribus

ORIGIN_TOKEN = "GEOM_ORIGEN"
TARGET_TOKEN = "GEOM_SYNC_"


def main():
    if not scribus.haveDoc():
        scribus.messageBox("Error", "No hay documento abierto", scribus.ICON_WARNING)
        return

    origin = None
    origin_page = None
    targets = []  # (nombre, página)

    # --- Localizar origen y destinos ---
    for page in range(1, scribus.pageCount() + 1):
        scribus.gotoPage(page)

        for item in scribus.getPageItems():
            name = item[0]
            obj_type = item[1]

            if obj_type != 4:  # TextFrame
                continue

            if ORIGIN_TOKEN in name and origin is None:
                origin = name
                origin_page = page

            elif TARGET_TOKEN in name:
                targets.append((name, page))

    if origin is None:
        scribus.messageBox(
            "Error",
            f"No se encontró ningún marco con '{ORIGIN_TOKEN}'",
            scribus.ICON_WARNING
        )
        return

    if not targets:
        scribus.messageBox(
            "Error",
            f"No se encontró ningún marco con '{TARGET_TOKEN}'",
            scribus.ICON_WARNING
        )
        return

    # --- Geometría del origen ---
    scribus.gotoPage(origin_page)
    scribus.deselectAll()
    scribus.selectObject(origin)

    ox, oy = scribus.getPosition(origin)
    ow, oh = scribus.getSize(origin)

    synced = 0

    scribus.setRedraw(False)

    # --- Aplicar a los destinos ---
    for name, page in targets:
        try:
            scribus.gotoPage(page)
            scribus.deselectAll()
            scribus.selectObject(name)

            # Mover y redimensionar SOBRE LA SELECCIÓN
            scribus.moveObjectAbs(ox, oy)
            scribus.sizeObject(ow, oh)

            synced += 1

        except:
            pass

    scribus.setRedraw(True)

    scribus.messageBox(
        "Resultado",
        f"Origen: {origin} (pág. {origin_page})\n"
        f"Destinos encontrados: {len(targets)}\n"
        f"Sincronizados: {synced}",
        scribus.ICON_INFORMATION
    )


if __name__ == "__main__":
    main()
