import Tesseract from 'tesseract.js';
import { DeliveryNoteData } from './geminiService';

/**
 * Parsed Daten lokal mittels Tesseract OCR und Regular Expressions.
 * Keine Daten verlassen den Browser.
 */
export const extractDeliveryNoteLocal = async (imageFile: File): Promise<DeliveryNoteData> => {
  try {
    // 1. Texterkennung mit Tesseract (Deutsch)
    const { data: { text } } = await Tesseract.recognize(
      imageFile,
      'deu', // Sprache Deutsch
      { 
        logger: m => console.log(m) // Fortschritt im Log anzeigen
      }
    );

    console.log("Extracted Text Raw:", text);

    // 2. Daten mittels RegEx extrahieren
    // Da OCR ungenau ist, müssen die Regex flexibel sein
    // Fix: Added missing required 'positions' property to satisfy the DeliveryNoteData interface
    const extractedData: DeliveryNoteData = {
        supplier: '',
        deliveryNoteNumber: '',
        invoiceNumber: '',
        poNumber: '',
        date: '',
        positions: []
    };

    // Datum suchen (Formate: DD.MM.YYYY, DD-MM-YYYY)
    const dateMatch = text.match(/(\d{2})[\.\-](\d{2})[\.\-](\d{4})/);
    if (dateMatch) {
        // Konvertiere zu YYYY-MM-DD für HTML Input
        extractedData.date = `${dateMatch[3]}-${dateMatch[2]}-${dateMatch[1]}`;
    }

    // Rechnungsnummer suchen
    // Sucht nach "Rechnung", "Rg-Nr", "Invoice" gefolgt von Nummern/Buchstaben
    const invoiceMatch = text.match(/(?:Rechnung|Rechnungs-?Nr\.?|Rg\.?-?Nr\.?|Invoice)\s*[:\.]?\s*([A-Za-z0-9\-\/]+)/i);
    if (invoiceMatch) {
        extractedData.invoiceNumber = invoiceMatch[1];
    }

    // Lieferscheinnummer suchen
    const deliveryMatch = text.match(/(?:Lieferschein|LS-?Nr\.?|Delivery Note)\s*[:\.]?\s*([A-Za-z0-9\-\/]+)/i);
    if (deliveryMatch) {
        extractedData.deliveryNoteNumber = deliveryMatch[1];
    }

    // Bestellnummer suchen
    const poMatch = text.match(/(?:Bestell-?Nr\.?|Bestellung|Order|PO|Auftrag)\s*[:\.]?\s*([A-Za-z0-9\-\/]+)/i);
    if (poMatch) {
        extractedData.poNumber = poMatch[1];
    }

    // Lieferant suchen (Sehr schwierig ohne KI, wir nehmen einfache Heuristiken)
    // Wir nehmen an, dass eine GmbH oder AG meist der Lieferant ist und weit oben steht
    const supplierMatch = text.match(/^.{0,100}?(.*?GmbH.*?|.*?AG.*?|.*?KG.*?)/m);
    if (supplierMatch) {
        extractedData.supplier = supplierMatch[1].trim();
    } else {
        // Fallback: Erste nicht-leere Zeile könnte der Firmenname sein
        const lines = text.split('\n').filter(l => l.trim().length > 3);
        if (lines.length > 0) extractedData.supplier = lines[0].trim();
    }

    return extractedData;

  } catch (error) {
    console.error("Local OCR Error:", error);
    throw new Error("Fehler bei der lokalen Texterkennung.");
  }
};