import os
from pypdf import PdfReader
from ai.local_ai_api import LocalAIApi
import json

def extract_text_from_pdf(pdf_path):
    try:
        reader = PdfReader(pdf_path)
        text = ""
        for page in reader.pages:
            text += page.extract_text() + "\n"
        
        if not text.strip():
            # If no text extracted, maybe it's an image-based PDF
            # In a real environment we would use OCR here
            return None
        return text
    except Exception as e:
        print(f"Error extracting text from PDF: {e}")
        return None

def analyze_invoice_text(text):
    prompt = f"""
    Sen profesyonel bir fatura veri ayıklama sistemisin. Aşağıdaki fatura metnini analiz et ve bilgileri kesinlikle JSON formatında döndür.
    
    Özellikle şu bilgileri bulmaya çalış:
    - Satıcı Firma Bilgileri: Adı, Vergi Kimlik Numarası (VKN), MERSİS Numarası, Adresi.
    - Fatura Bilgileri: Fatura No, Tarih, Ara Toplam, KDV Tutarı, Genel Toplam.
    - Satır Kalemleri: Her bir ürün veya hizmetin adı, adedi, birim fiyatı, KDV oranı, KDV tutarı ve toplam tutarı.

    Dikkat: 
    - Vergi numarası 10 haneli (VKN) veya 11 haneli (TCKN) olabilir.
    - MERSİS no genellikle 16 hanelidir.
    - Sayısal değerleri (tutarlar, adetler) sadece rakam ve nokta (ondalık için) olarak döndür. 
    - Tarihi YYYY-MM-DD formatına çevir.
    - Eğer bir veri bulunamazsa null döndür.

    İstenen JSON formatı:
    {{
      "firma_adi": "...",
      "vergi_no": "...",
      "mersis_no": "...",
      "adres": "...",
      "fatura_no": "...",
      "tarih": "YYYY-MM-DD",
      "ara_toplam": 0.00,
      "kdv_toplam": 0.00,
      "genel_toplam": 0.00,
      "kalemler": [
        {{
          "urun_adi": "...",
          "adet": 1,
          "birim_fiyat": 0.00,
          "kdv_orani": 20,
          "kdv_tutari": 0.00,
          "toplam_tutar": 0.00
        }}
      ]
    }}

    Fatura Metni:
    {text}
    """
    
    response = LocalAIApi.create_response({
        "input": [
            {"role": "system", "content": "Sen sadece JSON döndüren, hata payı düşük bir fatura analiz uzmanısın. Yanıtında asla JSON dışında metin bulundurma."}, 
            {"role": "user", "content": prompt},
        ],
        "text": {"format": {"type": "json_object"}},
    })
    
    if response.get("success"):
        return LocalAIApi.decode_json_from_response(response)
    return None
