from pypos.core.utils.db_helper import parse_float_safely

# edited by glg


class TransaksiHargaValidationService:
    @staticmethod
    def resolve_harga_jual(barang_detail, parse_float_callback=None) -> float:
        parser = parse_float_callback or parse_float_safely
        if not isinstance(barang_detail, dict):
            return 0.0

        candidates = (
            barang_detail.get("harga"),
            barang_detail.get("harga_normal"),
            barang_detail.get("harga_jual"),
        )

        for raw_value in candidates:
            harga = parser(raw_value, 0.0)
            if harga > 0:
                return float(harga)

        return 0.0

    @staticmethod
    def is_valid_harga_jual(barang_detail, parse_float_callback=None) -> bool:
        return TransaksiHargaValidationService.resolve_harga_jual(
            barang_detail,
            parse_float_callback=parse_float_callback,
        ) > 0

    @staticmethod
    def build_invalid_harga_log(id_barang, barang_detail):
        payload = barang_detail if isinstance(barang_detail, dict) else {}
        nama_barang = str(payload.get("nama") or "-")
        barcode = str(payload.get("barcode") or "-")
        return (
            "[ScanValidation] tolak item tanpa harga_jual "
            f"id={id_barang} nama={nama_barang} barcode={barcode}"
        )

    @staticmethod
    def build_invalid_harga_warning_message():
        return (
            "Barang ditemukan, tetapi harganya belum diatur.\n\n"
            "Langkah yang perlu dilakukan:\n"
            "1. Buka Web Admin.\n"
            "2. Atur harga jual barang tersebut.\n"
            "3. Jalankan sinkronisasi di POS.\n\n"
            "Setelah sinkronisasi selesai, silakan scan ulang barang."
        )
