import {
  CONTRACT_KIND,
  QUALITY_TYPE,
} from "../scanOut/scanOut.constants";
import {
  scanInboundSales,
  scanInboundSalesUnqualified,
} from "@/api/salesManagement/salesLedger";
import {
  scanInboundPurchase,
  scanInboundPurchaseUnqualified,
} from "@/api/procurementManagement/procurementLedger";

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

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

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