import json


class SettlementViewDataService:
    def extract_transaksi_ids(self, data_ids):
        if not data_ids:
            return []
        if isinstance(data_ids, list):
            return [item for item in data_ids if item]
        if isinstance(data_ids, str):
            try:
                parsed = json.loads(data_ids)
            except (TypeError, ValueError, json.JSONDecodeError):
                return []
            if isinstance(parsed, list):
                return [item for item in parsed if item]
        return []

    def calculate_total_non_tunai(self, summary):
        if not summary:
            return 0.0
        total = 0.0
        for item in summary.get("non_tunai", []):
            total += float(item.get("total_bayar", 0) or 0)
        multi = summary.get("multi")
        if multi:
            total += float(multi.get("total_bayar", 0) or 0)
        return total

    def build_rekap_text(self, rekap):
        if not rekap:
            return "Total Penjualan Non-Tunai:\nTidak ada data"
        edc_list = rekap.get("edc", {})
        if not edc_list:
            return "Total Penjualan Non-Tunai:\nTidak ada data"
        lines = ["Total Penjualan Non-Tunai:"]
        for edc, total in edc_list.items():
            lines.append(f"{edc}: {float(total or 0):,.0f}")
        return "\n".join(lines)

    def build_success_message(self, counter, print_ok):
        message = f"Settlement berhasil disimpan dengan ID: {counter}"
        if not print_ok:
            message += "\nSettlement tersimpan, tetapi cetak laporan tidak berhasil."
        return message
