# edited by glg


class HighQtyAuthorizationService:
    """
    Menyimpan state otorisasi qty besar per-produk dalam 1 sesi transaksi aktif.
    """

    def __init__(self, max_qty=99):
        self._max_qty = self._normalize_threshold(max_qty)
        self._authorized_produk_ids = set()

    def _normalize_threshold(self, value, default=99):
        try:
            parsed = int(value)
        except (TypeError, ValueError, OverflowError):
            parsed = int(default)
        return max(1, parsed)

    @property
    def max_qty(self):
        return int(self._max_qty)

    def update_threshold(self, max_qty):
        self._max_qty = self._normalize_threshold(max_qty, default=self._max_qty)

    def _normalize_produk_id(self, produk_id):
        return str(produk_id or "").strip()

    def is_over_limit(self, qty):
        try:
            qty_value = int(qty or 0)
        except (TypeError, ValueError, OverflowError):
            qty_value = 0
        return qty_value > self._max_qty

    def needs_authorization(self, produk_id, qty):
        if not self.is_over_limit(qty):
            return False
        key = self._normalize_produk_id(produk_id)
        if not key:
            return True
        return key not in self._authorized_produk_ids

    def mark_authorized(self, produk_id):
        key = self._normalize_produk_id(produk_id)
        if key:
            self._authorized_produk_ids.add(key)

    def clear_produk(self, produk_id):
        key = self._normalize_produk_id(produk_id)
        if key:
            self._authorized_produk_ids.discard(key)

    def reset(self):
        self._authorized_produk_ids.clear()
