import { delay } from './api';
import { ordersService } from './orders.service';
import type { CheckoutPayload, Order, PixCharge } from '@/types';

/**
 * Gera um pedido mockado a partir do checkout. No backend real isso
 * deve validar estoque, cupom e iniciar a cobrança no gateway.
 */
export const checkoutService = {
  // POST /api/stores/:slug/checkout
  submit: async (
    storeId: string,
    payload: CheckoutPayload,
    items: Order['items'],
    totals: { subtotal: number; discount: number; shipping: number; total: number },
  ): Promise<Order> => {
    const order: Order = {
      id: `ord_${Date.now()}`,
      storeId,
      number: `#${Math.floor(1000 + Math.random() * 9000)}`,
      customerId: `cust_${Date.now()}`,
      customerName: payload.customer.name,
      customerEmail: payload.customer.email,
      customerPhone: payload.customer.phone,
      items,
      subtotal: totals.subtotal,
      discount: totals.discount,
      shipping: totals.shipping,
      total: totals.total,
      couponCode: payload.couponCode,
      status: 'aguardando_pagamento',
      paymentStatus: 'pendente',
      paymentMethod: payload.paymentMethod,
      shippingMethod: payload.shippingMethod,
      shippingAddress: `${payload.address.street}, ${payload.address.number} - ${payload.address.district}, ${payload.address.city}/${payload.address.state}`,
      history: [
        { status: 'novo', date: new Date().toISOString() },
        { status: 'aguardando_pagamento', date: new Date().toISOString() },
      ],
      createdAt: new Date().toISOString(),
    };
    await ordersService.create(order);
    return delay(order);
  },

  /** Gera cobrança Pix mockada. Trocar por gateway (Asaas, Mercado Pago, OpenPix...). */
  createPixCharge: (amount: number): Promise<PixCharge> => {
    const code =
      '00020126580014BR.GOV.BCB.PIX0136mock-' +
      Math.random().toString(36).slice(2, 10) +
      '5204000053039865802BR5909LOJA SAAS6009SAO PAULO62070503***6304ABCD';
    const qr =
      'data:image/svg+xml;utf8,' +
      encodeURIComponent(
        `<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><rect width='220' height='220' fill='white'/><text x='110' y='110' font-size='14' text-anchor='middle' fill='black'>QR Code Pix (mock)</text></svg>`,
      );
    return delay({
      qrCodeImage: qr,
      copyPasteCode: code,
      amount,
      status: 'aguardando',
      expiresAt: new Date(Date.now() + 30 * 60 * 1000).toISOString(),
    });
  },
};
