# edited by glg
# mypy: disable-error-code=attr-defined
import logging

from PySide6.QtWidgets import QGroupBox, QLabel, QRadioButton, QSizePolicy, QVBoxLayout

LOGGER = logging.getLogger(__name__)


class TransaksiDiskonInfoMixin:
    # edited by glg
    # Dekomposisi hotspot view:
    # builder panel diskon dipisah agar index view tetap fokus orchestration UI.
    def update_info_diskon(self, barang_detail: dict):

        id_barang = str(barang_detail.get("id", ""))

        has_discount = bool(

            barang_detail.get("flag_diskon_grosir") or barang_detail.get("flag_diskon_free")

        )
        nama_barang = str(barang_detail.get("nama") or "").strip()

        if not hasattr(self, "diskon_groupbox_map"):

            self.diskon_groupbox_map = {}

        if not has_discount and id_barang not in self.diskon_groupbox_map:
            self._update_diskon_summary_indicator()
            return

        if id_barang in self.diskon_groupbox_map:

            groupbox, inner_layout = self.diskon_groupbox_map[id_barang]

            groupbox.setTitle(self._build_diskon_group_title(id_barang, nama_barang))

            groupbox.setProperty("has_discount", has_discount)

            while inner_layout.count():

                item = inner_layout.takeAt(0)

                widget = item.widget()

                if widget:

                    widget.deleteLater()

        else:

            groupbox = QGroupBox(self._build_diskon_group_title(id_barang, nama_barang))

            groupbox.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum)

            inner_layout = QVBoxLayout(groupbox)

            inner_layout.setSpacing(4)

            inner_layout.setContentsMargins(6, 6, 6, 6)

            groupbox.setLayout(inner_layout)

            groupbox.setProperty("class", "tpv-diskon-group")

            groupbox.setProperty("has_discount", has_discount)

            groupbox.setMinimumHeight(0)

            groupbox.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum)

            self.diskon_groupbox_map[id_barang] = (groupbox, inner_layout)

            self.info_diskon_layout.addWidget(groupbox)

        if not has_discount:
            self.hapus_info_diskon_by_id(id_barang)
            self._update_diskon_summary_indicator()
            return

        if barang_detail.get("flag_diskon_grosir"):

            LOGGER.debug(f"CEK DISKON GROSIR ,id barang nya untuk di cek diskon nya adalah {id_barang}")

            keterangan_diskon_raw = self.controller.diskon_controller.tampilkan_keterangan_produk_grosir(id_barang)

            keterangan_diskon = self._compact_radio_text(keterangan_diskon_raw, truncate=False)

            radio_grosir = QRadioButton(keterangan_diskon)

            radio_grosir.setToolTip(
                str(
                    barang_detail.get("keterangan_diskon")
                    or keterangan_diskon_raw
                    or ""
                )
            )

            radio_grosir.toggled.connect(

                lambda checked, idb=id_barang: self.on_diskon_selected(idb, "grosir") if checked else None

            )

            inner_layout.addWidget(radio_grosir)

        if barang_detail.get("flag_diskon_free"):

            LOGGER.debug(f"CEK DISKON FREE PORDUK ,id barang nya untuk di cek diskon nya adalah {id_barang}")

            nama_free = barang_detail.get("free_produk_nama", "-")

            jumlah_free = barang_detail.get("jumlah_free", 0)

            array_ket = []

            keterangan_free_raw = self.controller.diskon_controller.tampilkan_keterangan_produk_free(id_barang)
            array_ket.append(keterangan_free_raw)

            array_ket.append(f"Free Produk: {jumlah_free} x {nama_free}")

            keterangan_diskon_full = "\n".join(array_ket)
            keterangan_diskon = self._compact_radio_text(keterangan_diskon_full, truncate=False)

            radio_free = QRadioButton(keterangan_diskon)

            radio_free.setToolTip(str(keterangan_diskon_full or "Diskon Free Produk"))

            radio_free.toggled.connect(

                lambda checked, idb=id_barang: self.on_diskon_selected(idb, "free") if checked else None

            )

            inner_layout.addWidget(radio_free)

        if not barang_detail.get("flag_diskon_grosir") and not barang_detail.get("flag_diskon_free"):

            inner_layout.addWidget(QLabel("Tidak ada diskon untuk produk ini."))

        else:

            if barang_detail.get("flag_diskon_grosir"):

                radio_grosir.setChecked(True)

            elif barang_detail.get("flag_diskon_free"):

                radio_free.setChecked(True)

        self.reorder_info_diskon()
