from paddleocr import PaddleOCR
import requests
import json
import sys

# =========================
# VALIDASI PARAMETER
# =========================

if len(sys.argv) < 2:
    print(json.dumps({
        "status": "ERROR",
        "message": "File gambar belum diberikan"
    }))
    sys.exit()

image_file = sys.argv[1]

# =========================
# OCR
# =========================

ocr = PaddleOCR(
    use_angle_cls=True,
    lang='en'
)

result = ocr.ocr(
    image_file,
    cls=True
)

# =========================
# GABUNGKAN HASIL OCR
# =========================

texts = []

for line in result[0]:
    texts.append(line[1][0])

ocr_text = "\n".join(texts)

# =========================
# DEBUG OCR
# =========================

print("\n===== OCR TEXT =====")
print(ocr_text)
print("====================\n")

# =========================
# PROMPT GEMMA
# =========================

prompt = f"""
Dari teks OCR invoice berikut:

{ocr_text}

Cari:

1. supplier
2. invoice_no
3. tanggal

Aturan:
- Cari nomor faktur/invoice yang paling mungkin.
- Cari tanggal faktur.
- Jangan mengambil kode barang.
- Jangan mengambil kode produk.
- Jangan mengambil nomor PO.
- Jika tidak yakin isi null.
- Kembalikan HANYA JSON.
- Jangan beri penjelasan.

Contoh:

{{
  "supplier":"PT ABC",
  "invoice_no":"12345",
  "tanggal":"2025-01-01"
}}
"""

# =========================
# OLLAMA
# =========================

payload = {
    "model": "gemma3:4b",
    "prompt": prompt,
    "stream": False,
    "options": {
        "temperature": 0
    }
}

response = requests.post(
    "http://localhost:11434/api/generate",
    json=payload,
    timeout=300
)

# =========================
# DEBUG RESPONSE
# =========================

print("\n===== GEMMA RAW =====")
print(response.text)
print("====================\n")

# =========================
# OUTPUT JSON
# =========================

try:

    ai_text = response.json()["response"]

    ai_text = ai_text.replace("```json", "")
    ai_text = ai_text.replace("```", "")
    ai_text = ai_text.strip()

    print("\n===== FINAL JSON =====")
    print(ai_text)
    print("======================")

except Exception as e:

    print(json.dumps({
        "status": "ERROR",
        "message": str(e)
    }))