import fitz  # PyMuPDF
import os


def compress_and_grayscale_pdf(input_path, quality=60, dpi=150):
    """
    input_path: Cesta k souboru
    quality: Kvalita JPG komprese (1-100). 60 je dobrý kompromis pro čitelnost a velikost.
    dpi: Rozlišení. 150 DPI stačí pro čtení na monitoru/běžný tisk. Pro menší velikost zkuste 96 nebo 72.
    """

    # Kontrola existence souboru
    if not os.path.exists(input_path):
        print(f"Chyba: Soubor nebyl nalezen: {input_path}")
        return

    try:
        # Otevření zdrojového PDF
        doc = fitz.open(input_path)
        new_doc = fitz.open()  # Vytvoření nového prázdného PDF

        print(f"Zpracovávám: {os.path.basename(input_path)}")
        print(f"Původní velikost: {os.path.getsize(input_path) / 1024:.2f} KB")

        for page_num, page in enumerate(doc):
            # Nastavení matice pro změnu rozlišení (DPI)
            # Standardní PDF má 72 DPI. Zoom = požadované DPI / 72
            zoom = dpi / 72
            matrix = fitz.Matrix(zoom, zoom)

            # 1. Renderování stránky do obrázku (Pixmap)
            # colorspace=fitz.csGRAY zajistí převod do černobílé (Grayscale)
            pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY)

            # 2. Vytvoření nové stránky v cílovém dokumentu se stejnými rozměry
            # Používáme původní rozměry stránky (rect), aby se PDF "nezmenšilo" vizuálně na monitoru
            new_page = new_doc.new_page(width=page.rect.width, height=page.rect.height)

            # 3. Vložení zmenšeného a odbarveného obrázku zpět
            # stream=pix.tobytes("jpg") zajistí silnou kompresi
            new_page.insert_image(page.rect, stream=pix.tobytes("jpg", jpg_quality=quality))

        # Vytvoření názvu výstupního souboru
        output_path = input_path.replace(".pdf", "_bw_small.pdf")

        # Uložení s garbage collection (odstranění nepotřebných dat) a deflací
        new_doc.save(output_path, garbage=4, deflate=True)
        new_doc.close()
        doc.close()

        # Výpis výsledku
        new_size = os.path.getsize(output_path)
        print(f"Hotovo. Uloženo jako: {output_path}")
        print(f"Nová velikost: {new_size / 1024:.2f} KB")

    except Exception as e:
        print(f"Došlo k chybě: {e}")


# --- SPUŠTĚNÍ ---
# Použití raw stringu (r''), aby Python neinterpretoval zpětná lomítka jako escape znaky
file_path = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\90df6f84-72c8-40b8-8993-ce7e244b0cea.pdf'

# Můžete experimentovat s parametry.
# Pokud bude text nečitelný, zvyšte dpi na 200. Pokud je soubor moc velký, snižte quality na 40.
compress_and_grayscale_pdf(file_path, quality=50, dpi=120)