import fitz  # PyMuPDF
import pytesseract
from PIL import Image
import os
import re

# --- NASTAVENÍ ---
PATH_TO_TESSERACT = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
INPUT_FILE = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\9b79f621-30ad-4468-85fe-6f2fd76289ce.pdf'

# Nastavíme Tesseract
pytesseract.pytesseract.tesseract_cmd = PATH_TO_TESSERACT


def debug_ocr_output():
    if not os.path.exists(INPUT_FILE):
        print(f"Soubor nenalezen: {INPUT_FILE}")
        return

    print(f"ANALÝZA SOUBORU: {os.path.basename(INPUT_FILE)}")
    doc = fitz.open(INPUT_FILE)

    # Projdeme první stranu (RČ bývá tam)
    for i, page in enumerate(doc):
        if i > 0: break  # Stačí nám 1. strana pro test

        print(f"\n--- STRANA {i + 1} (300 DPI) ---")

        # 1. Renderování ve vysoké kvalitě (stejně jako v 'Ultimate' skriptu)
        # Pokud je sken nekvalitní, Tesseract potřebuje velké rozlišení
        zoom = 300 / 72
        matrix = fitz.Matrix(zoom, zoom)
        pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY)
        img = Image.frombytes("L", [pix.width, pix.height], pix.samples)

        # 2. OCR - Získání surového textu
        # config='--psm 3' je standardní automatická segmentace stránky
        raw_text = pytesseract.image_to_string(img, lang='ces', config='--psm 3')

        print(">>> SUROVÝ TEXT Z TESSERACTU (ZAČÁTEK) <<<")
        print("-" * 50)
        print(raw_text)
        print("-" * 50)
        print(">>> SUROVÝ TEXT Z TESSERACTU (KONEC) <<<")

        # 3. Test Regexu na tomto textu
        print("\n--- TEST HLEDÁNÍ RČ ---")

        # Standardní Regex
        strict_pattern = r'\b\d{6}\s*[\/]?\s*\d{3,4}\b'
        strict_matches = re.findall(strict_pattern, raw_text)
        print(f"Přísný filtr (očekává jen čísla): {strict_matches}")

        # Volnější Regex (hledá i chyby OCR jako 'O' místo '0' nebo 'l' místo '1')
        # \d -> číslice
        # [O0] -> nula nebo O
        # [lI1] -> jednička, malé L nebo velké i
        loose_pattern = r'\b[0-9O]{6}\s*[\/ilI1]?\s*[0-9O]{3,4}\b'
        loose_matches = re.findall(loose_pattern, raw_text)

        if loose_matches and not strict_matches:
            print(f"⚠️ POZOR: Našel jsem RČ jen pomocí volného filtru (obsahuje překlepy OCR): {loose_matches}")
            print("   -> Bude potřeba upravit čistící funkci.")


if __name__ == "__main__":
    debug_ocr_output()