from pypos.modules.penjualan.models.detail_transaksi_model import DetailTransaksi


class TransaksiPreorderService:
    def prepare_save_payload(self, transaksi_data, detail_data):
        transaksi_data_list = list(transaksi_data or [])
        if not transaksi_data_list:
            return None, None
        # edited by glg
        # Index 14 dipakai untuk ppn_mode agar transaksi simpan mempertahankan mode pajak.
        while len(transaksi_data_list) < 15:
            transaksi_data_list.append(None)
        if len(transaksi_data_list) > 11:
            transaksi_data_list[11] = "simpan_transaksi"
        if str(transaksi_data_list[14] or "").strip().lower() not in {"include", "exclude"}:
            transaksi_data_list[14] = "include"
        for item in detail_data or []:
            item.produk_jenis = "simpan_transaksi"
        return transaksi_data_list, detail_data

    def build_restore_payload(self, preorder_payload, detail_rows):
        if not preorder_payload or not preorder_payload.get("transaksi"):
            return None
        raw = preorder_payload["transaksi"]
        transaksi_data = [
            raw.get("nomer"),
            raw.get("dtime"),
            raw.get("transaksi_nilai", 0),
            raw.get("diskon_persen", 0),
            raw.get("ppn_persen", 0),
            raw.get("transaksi_bulat", raw.get("transaksi_nilai", 0)),
            raw.get("customers_id"),
            raw.get("customers_nama"),
            raw.get("fulldate") or (raw.get("dtime") or "")[:10],
            raw.get("oleh_id"),
            raw.get("oleh_nama"),
            raw.get("jenis_label") or "simpan_transaksi",
            raw.get("transaksi_jenis") or "758",
            raw.get("settlement_id", 1),
            # edited by glg
            raw.get("ppn_mode") or "include",
        ]
        detail_data = []
        for row in detail_rows or []:
            try:
                produk_id, nama, harga, jumlah, diskon_persen_item, satuan = row
            except ValueError:
                continue
            detail_data.append(
                DetailTransaksi(
                    produk_id=produk_id,
                    produk_nama=nama,
                    produk_ord_hrg=harga,
                    produk_ord_jml=jumlah,
                    produk_jenis="simpan_transaksi",
                    produk_ord_diskon=diskon_persen_item,
                    satuan=satuan,
                )
            )
        return {
            "nomer": raw.get("nomer"),
            "transaksi_data": transaksi_data,
            "detail_data": detail_data,
            "transaksi_id": preorder_payload.get("transaksi_id"),
        }
