from paddleocr import PaddleOCR
from supplier_detector import detect_supplier

import json
import sys

# ==========================================
# VALIDASI PARAMETER
# ==========================================

if len(sys.argv) < 2:

    print("Pemakaian:")
    print("python test_parser.py sample.jpg")
    sys.exit()

image_file = sys.argv[1]

# ==========================================
# OCR
# ==========================================

ocr = PaddleOCR(
    use_angle_cls=True,
    lang="en"
)

raw = ocr.ocr(
    image_file,
    cls=True
)

# ==========================================
# BENTUK OCR ITEMS
# ==========================================

ocr_items = []

for line in raw[0]:

    box = line[0]

    item = {
        "text": line[1][0],
        "x": int(box[0][0]),
        "y": int(box[0][1]),
        "score": round(float(line[1][1]), 4)
    }

    ocr_items.append(item)

# ==========================================
# SORTING
# ==========================================

ocr_items.sort(
    key=lambda r: (r["y"], r["x"])
)

# ==========================================
# DEBUG OCR
# ==========================================

print("\n===== OCR DETAIL =====\n")

for item in ocr_items:

    print(
        f'({item["x"]:4},{item["y"]:4})  '
        f'{item["score"]:.2f}  '
        f'{item["text"]}'
    )

print("\n======================\n")

# ==========================================
# DETECT SUPPLIER
# ==========================================

supplier = detect_supplier(
    ocr_items
)

print("SUPPLIER =", supplier)

# ==========================================
# DISPATCH PARSER
# ==========================================

if supplier == "PT.INDOLAKTO":

    from parser.parser_indolakto import parse

else:

    from parser.parser_default import parse

# ==========================================
# PARSE
# ==========================================

result = parse(
    ocr_items
)

# ==========================================
# OUTPUT
# ==========================================

print("\n===== RESULT =====\n")

print(
    json.dumps(
        result,
        indent=2
    )
)

print("\n==================\n")