// Mock data for order payments
export const orderPayments = [
  {
    id: 1,
    order_id: 1,
    method: "credit_card",
    description: "Visa ending in 4242",
    amount_paid: 1898,
    reference: "PAY-1234567890",
    status: "completed",
    paid_at: "2024-04-01T10:30:00Z",
    created_at: "2024-04-01T10:30:00Z",
    updated_at: "2024-04-01T10:30:00Z",
  },
  {
    id: 2,
    order_id: 2,
    method: "paypal",
    description: "PayPal Account: john.doe@example.com",
    amount_paid: 1699,
    reference: "PAY-0987654321",
    status: "completed",
    paid_at: "2024-04-02T14:35:00Z",
    created_at: "2024-04-02T14:35:00Z",
    updated_at: "2024-04-02T14:35:00Z",
  },
  {
    id: 3,
    order_id: 3,
    method: "bank_transfer",
    description: "Bank Transfer Reference: WM12345",
    amount_paid: 1299,
    reference: "TRF-1234567",
    status: "completed",
    paid_at: "2024-04-03T10:00:00Z",
    created_at: "2024-04-03T10:00:00Z",
    updated_at: "2024-04-03T10:00:00Z",
  },
  {
    id: 4,
    order_id: 4,
    method: "alipay",
    description: "Alipay Transaction",
    amount_paid: 0,
    reference: "ALI-9876543",
    status: "pending",
    paid_at: null,
    created_at: "2024-04-04T16:30:00Z",
    updated_at: "2024-04-04T16:30:00Z",
  },
  {
    id: 5,
    order_id: 5,
    method: "wechat_pay",
    description: "WeChat Pay Transaction",
    amount_paid: 0,
    reference: "WCP-5432198",
    status: "failed",
    paid_at: null,
    created_at: "2024-04-05T11:20:00Z",
    updated_at: "2024-04-05T11:25:00Z",
  },
  {
    id: 6,
    order_id: 6,
    method: "credit_card",
    description: "Mastercard ending in 5678",
    amount_paid: 1299,
    reference: "PAY-7654321",
    status: "refunded",
    paid_at: "2024-04-06T09:15:00Z",
    created_at: "2024-04-06T09:15:00Z",
    updated_at: "2024-04-06T14:30:00Z",
  },
  {
    id: 7,
    order_id: 7,
    method: "bank_transfer",
    description: "Bank Transfer Reference: WM67890",
    amount_paid: 1999,
    reference: "TRF-7890123",
    status: "completed",
    paid_at: "2024-04-07T13:50:00Z",
    created_at: "2024-04-07T13:50:00Z",
    updated_at: "2024-04-07T13:50:00Z",
  },
]

/**
 * Get all order payments
 * @returns Array of order payments
 */
export const getOrderPayments = () => {
  return orderPayments
}

/**
 * Get payments by order ID
 * @param orderId Order ID
 * @returns Array of payments for the order
 */
export const getPaymentsByOrderId = (orderId: number) => {
  return orderPayments.filter((payment) => payment.order_id === orderId)
}

/**
 * Get payment by ID
 * @param id Payment ID
 * @returns Payment object or undefined if not found
 */
export const getPaymentById = (id: number) => {
  return orderPayments.find((payment) => payment.id === id)
}

/**
 * Create a new payment
 * @param paymentData Payment data
 * @returns Newly created payment
 */
export const createPayment = (paymentData: any) => {
  const newPayment = {
    id: orderPayments.length + 1,
    ...paymentData,
    created_at: new Date().toISOString(),
    updated_at: new Date().toISOString(),
  }
  orderPayments.push(newPayment)
  return newPayment
}

/**
 * Update an existing payment
 * @param id Payment ID
 * @param paymentData Updated payment data
 * @returns Updated payment
 */
export const updatePayment = (id: number, paymentData: any) => {
  const index = orderPayments.findIndex((payment) => payment.id === id)
  if (index === -1) {
    throw new Error(`Payment with ID ${id} not found`)
  }

  const updatedPayment = {
    ...orderPayments[index],
    ...paymentData,
    updated_at: new Date().toISOString(),
  }

  orderPayments[index] = updatedPayment
  return updatedPayment
}

/**
 * Delete a payment
 * @param id Payment ID
 * @returns Boolean indicating success
 */
export const deletePayment = (id: number) => {
  const index = orderPayments.findIndex((payment) => payment.id === id)
  if (index === -1) {
    return false
  }

  orderPayments.splice(index, 1)
  return true
}
