import { StepResponse, createStep } from "@medusajs/framework/workflows-sdk"
import {
  CommissionCalculationContext,
  CreateCommissionLineDTO,
  MercurModules,
} from "@mercurjs/types"

import CommissionModuleService from "../../../modules/commission/service"
import { promiseAll } from "@medusajs/framework/utils"

export const getCommissionLinesStepId = "get-commission-lines"

export const getCommissionLinesStep = createStep(
  getCommissionLinesStepId,
  async (
    input: CommissionCalculationContext[],
    { container }
  ): Promise<StepResponse<CreateCommissionLineDTO[]>> => {
    const service =
      container.resolve(MercurModules.COMMISSION) as CommissionModuleService


    const commissionLines = await promiseAll(
      input.map(async (context) => {
        return await service.getCommissionLines(context)
      })
    )

    return new StepResponse(commissionLines.flat())
  }
)
