#!/usr/bin/env python3
"""
Medizinisches Dokumentanalyse-Tool
Extrahiert Text aus PDFs und Bildern für das Second Brain
"""

import sys
import os

def process_file(file_path):
    """
    Hauptfunktion zur Dokumentanalyse.
    
    Args:
        file_path: Pfad zur Eingabedatei
        
    Returns:
        Extrahierter Text als String
    """
    
    if not os.path.exists(file_path):
        return f"FEHLER: Datei nicht gefunden: {file_path}"
    
    # Dateiendung prüfen
    file_ext = os.path.splitext(file_path)[1].lower()
    
    if file_ext == '.pdf':
        return process_pdf(file_path)
    elif file_ext in ['.jpg', '.jpeg', '.png']:
        return process_image(file_path)
    else:
        return f"FEHLER: Nicht unterstütztes Dateiformat: {file_ext}"


def process_pdf(file_path):
    """
    Extrahiert Text aus PDF-Dateien mit PyMuPDF (fitz).
    
    Args:
        file_path: Pfad zur PDF-Datei
        
    Returns:
        Extrahierter Text als String
    """
    
    try:
        import fitz  # PyMuPDF
        
        text_content = []
        
        # PDF öffnen
        doc = fitz.open(file_path)
        
        # Alle Seiten durchlaufen
        for page_num in range(len(doc)):
            page = doc[page_num]
            text = page.get_text()
            text_content.append(f"--- Seite {page_num + 1} ---\n{text}")
        
        doc.close()
        
        full_text = "\n\n".join(text_content)
        
        if not full_text.strip():
            return "WARNUNG: Kein Text aus PDF extrahiert (möglicherweise gescannt/bildbasiert)"
        
        return full_text
        
    except ImportError:
        return "FEHLER: PyMuPDF (fitz) nicht installiert. Bitte: pip install pymupdf"
    except Exception as e:
        return f"FEHLER bei PDF-Verarbeitung: {e}"


def process_image(file_path):
    """
    Extrahiert medizinische Daten aus Bildern mittels Ollama Vision.
    
    Args:
        file_path: Pfad zum Bild (jpg, png, jpeg)
        
    Returns:
        Extrahierter Text von Ollama
    """
    
    try:
        import base64
        import json
        import requests
        
        # Bild in Base64 kodieren
        with open(file_path, "rb") as image_file:
            encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
        
        # Ollama API-Anfrage vorbereiten
        # Verwendet qwen3.5-vl oder Standard-Vision-Modell
        prompt = """Analysiere dieses medizinische Bild und extrahiere ALLE medizinischen Daten:
- Laborwerte mit Referenzbereichen
- Medikamente und Dosierungen
- Diagnosen und Befunde
- Daten und Daten
- Alle Inhaltsstoffe oder Zusammensetzungen

Gib die Daten strukturiert und vollständig zurück."""
        
        # Ollama-Anfrage senden
        # Modell: qwen3.5-vl (oder llava, vision-Modell)
        model = "qwen3.5-vl"  # Fallback: llava
        
        payload = {
            "model": model,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": prompt},
                        {
                            "type": "image_url",
                            "image_url": {
                                "url": f"data:image/jpeg;base64,{encoded_image}"
                            }
                        }
                    ]
                }
            ],
            "stream": False
        }
        
        # Ollama lokal abfragen
        response = requests.post(
            "http://localhost:11434/api/chat",
            json=payload,
            timeout=60
        )
        
        if response.status_code == 200:
            result = response.json()
            return result.get("message", {}).get("content", "Keine Antwort von Ollama")
        else:
            return f"FEHLER: Ollama-Antwort {response.status_code}: {response.text}"
            
    except ImportError:
        return "FEHLER: requests nicht installiert. Bitte: pip install requests"
    except Exception as e:
        return f"FEHLER bei Bildverarbeitung: {e}"


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Verwendung: python3 analyze_document.py <dateipfad>")
        sys.exit(1)
    
    file_path = sys.argv[1]
    
    print(f"📄 Analysiere: {file_path}")
    print("-" * 50)
    
    result = process_file(file_path)
    print(result)