import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
import type CompanyReviewModuleService from "../../../../modules/company-review/service"
import { COMPANY_REVIEW_MODULE } from "../../../../modules/company-review"

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 companyReviewModuleService = req.scope.resolve<CompanyReviewModuleService>(COMPANY_REVIEW_MODULE)
  const reviews = await companyReviewModuleService.listCompanyReviews({ is_published: true })
  const sortedReviews = [...reviews].sort((a, b) => getCreatedAtValue(b) - getCreatedAtValue(a))

  res.json({
    reviews: sortedReviews.map((review) => ({
      id: review.id,
      author_name: review.author_name,
      rating: review.rating,
      body: review.body,
      created_at: review.created_at,
    })),
  })
}
