import fitz  # PyMuPDF
from PIL import Image
import io
import os

# --- NASTAVENÍ ---
INPUT_FILE = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\90df6f84-72c8-40b8-8993-ce7e244b0cea.pdf'

# 1. Prahové hodnoty: Zúžíme výběr na nejpravděpodobnější rozsah
THRESHOLDS = [110, 130, 150, 170]

# 2. DPI Varianty k testování
# 131 = Přesná polovina originálu (váš nápad)
# 150 = Standard
# 200 = Vysoká kvalita
# 262 = Originál (žádná ztráta detailů, jen ztráta barev)
DPI_LIST = [131, 150, 200, 262]


def generate_final_matrix():
    if not os.path.exists(INPUT_FILE):
        print(f"Chyba: Soubor nenalezen.")
        return

    # Příprava složky
    base_folder = os.path.dirname(INPUT_FILE)
    filename = os.path.basename(INPUT_FILE)
    name_without_ext = os.path.splitext(filename)[0]

    output_dir = os.path.join(base_folder, "_TEST_DPI_MATH")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    print(f"Generuji varianty do: {output_dir}")
    print("-" * 80)
    print(f"{'DPI':<5} | {'Práh':<6} | {'Velikost':<12} | {'Poznámka'}")
    print("-" * 80)

    doc = fitz.open(INPUT_FILE)

    for dpi in DPI_LIST:
        # Přednačtení stránek v daném DPI
        pages_at_dpi = []
        for page in doc:
            zoom = dpi / 72
            matrix = fitz.Matrix(zoom, zoom)
            pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY)
            pages_at_dpi.append(pix)

        for t in THRESHOLDS:
            new_doc = fitz.open()

            for i, pix in enumerate(pages_at_dpi):
                # Binarizace
                img = Image.frombytes("L", [pix.width, pix.height], pix.samples)
                img_bw = img.point(lambda x: 255 if x > t else 0, mode='1')

                # Uložení
                buffer = io.BytesIO()
                img_bw.save(buffer, format="PNG", optimize=True)

                # Vložení zpět
                orig_rect = doc[i].rect
                new_page = new_doc.new_page(width=orig_rect.width, height=orig_rect.height)
                new_page.insert_image(orig_rect, stream=buffer.getvalue())

            # Uložení
            output_name = f"dpi{dpi}_t{t}.pdf"
            output_path = os.path.join(output_dir, output_name)
            new_doc.save(output_path, garbage=4, deflate=True)
            new_doc.close()

            # Výpis
            size_kb = os.path.getsize(output_path) / 1024

            note = ""
            if dpi == 131: note = "(Polovina originálu)"
            if dpi == 262: note = "(Originální rozlišení)"

            print(f"{dpi:<5} | {t:<6} | {size_kb:<9.2f} KB | {note}")

    doc.close()
    print("-" * 80)


if __name__ == "__main__":
    generate_final_matrix()