import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
import type QuoteModuleService from "../../../../modules/quote/service"
import { QUOTE_MODULE } from "../../../../modules/quote"

function getCreatedAtValue(input: { created_at?: Date | string | null }) {
  const raw = input.created_at
  if (!raw) {
    return 0
  }

  const date = raw instanceof Date ? raw : new Date(raw)
  return Number.isNaN(date.getTime()) ? 0 : date.getTime()
}

export async function GET(req: MedusaRequest, res: MedusaResponse) {
  const quoteModuleService = req.scope.resolve<QuoteModuleService>(QUOTE_MODULE)
  const quotes = await quoteModuleService.listQuotes({})
  const sortedQuotes = [...quotes].sort((a, b) => {
    return getCreatedAtValue(b) - getCreatedAtValue(a)
  })

  res.json({
    quotes: sortedQuotes.map((quote) => ({
      ...quote,
      items: JSON.parse((quote.items_snapshot as string) || "[]"),
      cart_snapshot: JSON.parse((quote.cart_snapshot as string) || "{}"),
    })),
  })
}
