import { MedusaContainer } from "@medusajs/framework"
import {
  ContainerRegistrationKeys,
  ModuleRegistrationName,
} from "@medusajs/framework/utils"

export default async function seed_shipping_options({
  container,
}: {
  container: MedusaContainer
}) {
  const logger = container.resolve(ContainerRegistrationKeys.LOGGER)
  const query = container.resolve(ContainerRegistrationKeys.QUERY)
  const fulfillmentModuleService = container.resolve(
    ModuleRegistrationName.FULFILLMENT
  )

  logger.info("Seeding RajaOngkir shipping options...")

  const { data: shippingProfileResult } = await query.graph({
    entity: "shipping_profile",
    fields: ["id"],
  })
  if (!shippingProfileResult?.length) {
    logger.error("No shipping profiles found")
    return
  }
  const shippingProfile = shippingProfileResult[0]

  const { data: fulfillmentSets } = await query.graph({
    entity: "fulfillment_set",
    fields: ["id", "name", "service_zones.id", "service_zones.name"],
  })
  const indonesiaSet = fulfillmentSets?.find(
    (fs: any) => fs.name === "Pengiriman Indonesia"
  )
  if (!indonesiaSet) {
    logger.error("Fulfillment set 'Pengiriman Indonesia' not found. Run seed-indonesia first.")
    return
  }
  const serviceZoneId = indonesiaSet.service_zones[0].id

  const couriers = [
    { code: "jne", name: "JNE", description: "Jalur Nugraha Ekakurir (JNE)" },
    { code: "jnt", name: "J&T Express", description: "J&T Express" },
    { code: "sicepat", name: "SiCepat", description: "SiCepat Ekspres" },
    { code: "pos", name: "POS Indonesia", description: "POS Indonesia" },
    { code: "tiki", name: "TIKI", description: "TIKI Ekspres" },
  ]

  const input = couriers.map((courier) => ({
    name: courier.name,
    price_type: "calculated" as const,
    provider_id: "rajaongkir_rajaongkir",
    service_zone_id: serviceZoneId,
    shipping_profile_id: shippingProfile.id,
    data: {
      courier: courier.code,
    },
    type: {
      label: courier.name,
      description: courier.description,
      code: courier.code,
    },
    rules: [
      {
        attribute: "enabled_in_store",
        value: "true",
        operator: "eq",
      },
      {
        attribute: "is_return",
        value: "false",
        operator: "eq",
      },
    ],
  }))

  await fulfillmentModuleService.createShippingOptions(input as any)

  logger.info("RajaOngkir shipping options created successfully.")
}
