from typing import Dict

# edited by glg


class TransaksiViewSummaryService:
    @staticmethod
    def format_rupiah(angka: float) -> str:
        try:
            value = float(angka or 0)
        except (TypeError, ValueError):
            value = 0.0
        return f"{value:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")

    @staticmethod
    def format_member_diskon_persen(value) -> str:
        try:
            return f"{float(value or 0):.2f} %"
        except (TypeError, ValueError):
            return "0.00 %"

    @staticmethod
    def build_free_items_text(free_items) -> str:
        if free_items:
            free_lines = [f"{nama} ({qty} pcs)" for nama, qty in sorted((free_items or {}).items())]
            return "\n".join(free_lines)
        return "-"

    @staticmethod
    def build_summary_label_payload(
        *,
        total_produk,
        diskon_produk,
        free_items,
        total_bayar,
        diskon_customer=0,
        cashback=0,
        point=0,
        diskon_member_persen=0,
        additional_diskon=0,
        grand_total=None,
    ) -> Dict[str, str]:
        grand_total_value = total_bayar if grand_total is None else grand_total
        return {
            "info_total_produk": TransaksiViewSummaryService.format_rupiah(total_produk),
            "info_diskon": TransaksiViewSummaryService.format_rupiah(diskon_produk),
            "info_diskon_member_persen": TransaksiViewSummaryService.format_member_diskon_persen(
                diskon_member_persen
            ),
            "info_diskon_customer": TransaksiViewSummaryService.format_rupiah(diskon_customer),
            "info_additional_diskon": TransaksiViewSummaryService.format_rupiah(additional_diskon),
            "info_grand_total": TransaksiViewSummaryService.format_rupiah(grand_total_value),
            "info_cashback": TransaksiViewSummaryService.format_rupiah(cashback),
            "info_point": TransaksiViewSummaryService.format_rupiah(point),
            "info_free_item": TransaksiViewSummaryService.build_free_items_text(free_items),
            "total_label": TransaksiViewSummaryService.format_rupiah(total_bayar),
        }
