import { eq } from 'drizzle-orm'
import { getOrderById, OrderNotFoundError, type Order, type OrdersSchema } from '@platform-modules/commerce-orders'
import type { Querier } from '@platform-modules/db'
import { checkoutSession } from './schema.js'
import type { CheckoutDeps } from './types.js'

export async function getCheckoutStatus<S extends OrdersSchema>(
  deps: CheckoutDeps<S>,
  orderId: string,
  buyerRef: { userId: string },
): Promise<{ status: Order['status']; clientSecret?: string }> {
  const order = await getOrderById(deps.db as unknown as Querier<OrdersSchema>, orderId, {
    userId: buyerRef.userId,
  })
  if (!order) {
    throw new OrderNotFoundError(orderId)
  }

  const result: { status: Order['status']; clientSecret?: string } = {
    status: order.status,
  }

  if (order.status === 'charging') {
    const [session] = await deps.db
      .select()
      .from(checkoutSession)
      .where(eq(checkoutSession.orderId, orderId))
    if (session) {
      result.clientSecret = session.clientSecret
    }
  }

  return result
}
