from pdf2image import convert_from_path
from PIL import Image
import img2pdf
import os
import pathlib
import glob

# *** KONFIGURACE ***
# Cesta ke složce, kde se nacházejí PDF soubory
INPUT_DIR = r"u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller"
# Cesta k binární složce Poppleru (musí být správná, aby to fungovalo)
POPPLER_BIN_PATH = r'c:\poppler\library\bin'
# Rozlišení pro čitelnost (300 DPI by mělo být perfektní pro text)
TARGET_DPI = 200


# *******************

def create_min_bw_pdf(input_pdf_path, output_pdf_path, dpi):
    """
    Konvertuje jeden PDF soubor na nový, maximálně zmenšený, černobílý PDF.
    """
    temp_image_path = "temp_bw_image_for_batch.png"
    success = False

    print(f"\n--- Zpracovávám: {pathlib.Path(input_pdf_path).name} (DPI: {dpi}) ---")

    try:
        # 1. Převod PDF na obrázek (bitmapu)
        # Používáme grayscale=True, ale hlavní komprese přijde v kroku 2
        images = convert_from_path(
            input_pdf_path,
            dpi=dpi,
            grayscale=True,
            thread_count=1,
            poppler_path=POPPLER_BIN_PATH
        )

        if not images:
            print(f"⚠️ Chyba: Nepodařilo se konvertovat stránku z {input_pdf_path}.")
            return success

        # 2. Zpracování a převod na 1-bitový ČERNOBÍLÝ režim (maximální komprese barev)
        image = images[0]
        bw_image = image.convert('1')

        # Uložení do dočasného PNG souboru (nejlepší pro 1-bitový obraz)
        bw_image.save(temp_image_path, format='PNG', optimize=True)

        # 3. Konverze dočasného obrázku zpět na PDF (přepisování originálu)
        # Důležité: 'output_pdf_path' je stejné jako 'input_pdf_path'
        with open(output_pdf_path, "wb") as f:
            f.write(img2pdf.convert(temp_image_path))

        # Zpráva o úspěchu a úspoře
        original_size = os.path.getsize(input_pdf_path)
        new_size = os.path.getsize(output_pdf_path)
        reduction = (1 - new_size / original_size) * 100

        print(
            f"✅ Úspěch! Původní: {original_size / 1024:.2f} KB, Nový: {new_size / 1024:.2f} KB (Úspora: {reduction:.2f} %)")
        success = True

    except Exception as e:
        print(f"❌ Nastala chyba při zpracování {input_pdf_path}: {e}")
        print("Zkontrolujte, zda je Poppler cesta správná a máte práva k zápisu.")

    finally:
        # Vyčištění dočasného souboru
        if os.path.exists(temp_image_path):
            os.remove(temp_image_path)
        return success


def process_directory(input_directory, dpi):
    """
    Prochází zadaný adresář, hledá PDF a volá konverzní funkci.
    """
    if not os.path.isdir(input_directory):
        print(f"Chyba: Adresář nebyl nalezen na cestě: {input_directory}")
        return

    # Najdeme všechny soubory s příponou .pdf (ignorujeme velikost písmen)
    pdf_files = glob.glob(os.path.join(input_directory, '*.pdf'), recursive=False)

    if not pdf_files:
        print(f"Ve složce {input_directory} nebyly nalezeny žádné PDF soubory.")
        return

    print(f"\nNalezeno {len(pdf_files)} souborů ke zpracování v {input_directory}.")
    print("----------------------------------------------------------------------")

    total_processed = 0
    for file_path in pdf_files:
        # Vstupní cesta je zároveň výstupní cestou (přepisování)
        if create_min_bw_pdf(file_path, file_path, dpi):
            total_processed += 1

    print("----------------------------------------------------------------------")
    print(f"Konec zpracování. Celkem úspěšně zpracováno: {total_processed}/{len(pdf_files)} souborů.")


# --- SPUSŤTE POUZE, AŽ BUDETE PŘIPRAVENI PŘEPSAT SOUBORY ---
print(f"!!! POUŽÍVÁ SE DPI: {TARGET_DPI}. ORIGINÁLNÍ SOUBORY BUDOU PŘEPSÁNY !!!")
process_directory(INPUT_DIR, TARGET_DPI)