import {
  CONTRACT_KIND,
  QUALITY_TYPE,
} from "./scanOut.constants";
import type { ContractKind, QualityType } from "./scanOut.constants";
import {
  scanOutboundSales,
  scanOutboundSalesUnqualified,
} from "@/api/salesManagement/salesLedger";
import {
  scanOutboundPurchase,
  scanOutboundPurchaseUnqualified,
} from "@/api/procurementManagement/procurementLedger";

type AnyRow = Record<string, any>;
type AnyRef<T> = { value: T };

type SubmitConfig = {
  runApi: (data: any) => Promise<any>;
  payloadBuilder: (list: AnyRow[]) => any;
};

export function createSubmitConfig(scanLedgerIdRef: AnyRef<string | number | null>) {
  const cfg: Record<string, SubmitConfig> = {
    [`${CONTRACT_KIND.sales}-${QUALITY_TYPE.qualified}`]: {
      runApi: scanOutboundSales,
      payloadBuilder: (list: AnyRow[]) => ({
        salesLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.sales}-${QUALITY_TYPE.unqualified}`]: {
      runApi: scanOutboundSalesUnqualified,
      payloadBuilder: (list: AnyRow[]) => ({
        salesLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.qualified}`]: {
      runApi: scanOutboundPurchase,
      payloadBuilder: (list: AnyRow[]) => ({
        purchaseLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
    [`${CONTRACT_KIND.purchase}-${QUALITY_TYPE.unqualified}`]: {
      runApi: scanOutboundPurchaseUnqualified,
      payloadBuilder: (list: AnyRow[]) => ({
        purchaseLedgerId: scanLedgerIdRef.value,
        salesLedgerProductList: list,
      }),
    },
  };
  return cfg;
}

