
    ]i|                     t    d Z ddlZddlZddlZddlZddlmZ  ej                  e      Z	dZ
dZdededefd	Zy)
uD   Gemini Vision utility — extract data dari foto laporan shift SPBU.    N)settingsz0https://generativelanguage.googleapis.com/v1betaa  
Kamu adalah sistem OCR untuk laporan shift SPBU (Stasiun Pengisian Bahan Bakar Umum) Indonesia.

Ekstrak data dari foto laporan shift ini dan kembalikan dalam format JSON.

INSTRUKSI:
- Baca semua angka dengan teliti
- Tanggal format: YYYY-MM-DD
- Shift: kembalikan angka romawi atau angka sesuai yang tertulis (I, II, III, atau 1, 2, 3)
- Teller: angka meter pompa (bisa 5-7 digit)
- Pecahan uang: jumlah LEMBAR per denominasi (bukan nilai total)
- Kalau tidak terbaca / tidak ada, kembalikan null

Kembalikan JSON dengan struktur PERSIS seperti ini (tanpa markdown, tanpa penjelasan):
{
  "tanggal": "YYYY-MM-DD",
  "shift": "II",
  "nozzles": [
    {
      "nama": "1A",
      "teller_awal_manual": "1234567",
      "teller_akhir_manual": "1240000",
      "teller_awal_digital": "1234567",
      "teller_akhir_digital": "1240000"
    }
  ],
  "harga": [
    {"produk": "Pertalite", "harga": 10000},
    {"produk": "Pertamax", "harga": 12350},
    {"produk": "Biosolar", "harga": 6800},
    {"produk": "Pertamax Turbo", "harga": null}
  ],
  "pecahan": {
    "100000": 162,
    "50000": 175,
    "20000": 14,
    "10000": 48,
    "5000": 44,
    "2000": 80,
    "1000": 13,
    "500": 0,
    "200": 0,
    "100": 0
  }
}
image_bytes	mime_typereturnc                   K   t         j                  }|st        d      t        j                  |       j                  d      }t         dt         j                   d| }dd||didt        igigd	d
dd}ddl	}t        j                  d      4 d{   }t        d      D ]  }|j                  ||       d{   }	|	j                  dk(  rL|dk  r<|dz   dz  }
t        j!                  d|
|dz          |j#                  |
       d{    nt        d      |	j%                           n 	j'                         }ddd      d{    j)                  dg       }|st        d      |d   j)                  di       j)                  dg       }d}|D ]  }d|v s||d   z  } |j+                         }|j-                  d      r%|j/                  d      }dj1                  |dd       }t'        j2                  |      }t        j5                  d |j)                  d!      |j)                  d"      t7        |j)                  d#g                    |S 7 7 7 P7 # 1 d{  7  sw Y   %xY ww)$z
    Kirim gambar ke Gemini Vision dan ekstrak data laporan shift.

    Returns dict dengan keys: tanggal, shift, nozzles, harga, pecahan
    zGEMINI_API_KEY not configuredzutf-8z/models/z:generateContent?key=parts
inlineData)mimeTypedatatextg?zapplication/json)temperatureresponseMimeType)contentsgenerationConfigr   N<   )timeout   )jsoni        
   z.Gemini rate limit, retry in %ds (attempt %d/3)z@Gemini sedang sibuk (rate limit). Tunggu 1 menit lalu coba lagi.
candidatesz Gemini tidak mengembalikan hasilcontent z```
z6GeminiVision: extracted tanggal=%s shift=%s nozzles=%dtanggalshiftnozzles)r   GEMINI_API_KEY
ValueErrorbase64	b64encodedecodeGEMINI_BASE_URLGEMINI_MODELEXTRACT_PROMPTasynciohttpxAsyncClientrangepoststatus_codeloggerwarningsleepraise_for_statusr   getstrip
startswithsplitjoinloadsinfolen)r   r   api_key	image_b64urlbodyr(   clientattemptrespwaitr   r   r   raw_textpartlinesresults                     9/var/www/html/spbu.com/backend/app/utils/gemini_vision.pyextract_from_imagerG   ?   sr     %%G899  -44W=IXh&;&;%<<QRYQZ
[C
 $(1$-' ^,

  2
D(   ,,QxGSt44D3&Q;#aK2-DNN#SUY[bef[fg!----- !cdd!!#   yy{ -, ,+J;<<qMi,00"=EHT>V$H 
 ~~H5!t$99U1R[)ZZ!F
KKH

9%vzz'':C

9VX@Y<Z\ME -4
 . -,,,su   BI:II:%I$?I AI$I3I$I:I!AI:"B7I:I$I$!I:$I7*I-+I72I:)__doc__r"   r   loggingr)   app.core.configr   	getLogger__name__r.   r%   r'   bytesstrdictrG        rF   <module>rR      sT    J     $			8	$D-`E% EC ED ErQ   