import { FastifyReply, FastifyRequest } from 'fastify';
import { request as undiciRequest } from 'undici';

const ARCH_ORIGIN = 'https://arch.sinsay.com';

export async function handleArchProductProxy(
  request: FastifyRequest<{ Params: { sku: string } }>,
  reply: FastifyReply,
): Promise<void> {
  const sku = encodeURIComponent(String(request.params.sku ?? '').trim());
  if (!sku) {
    reply.status(400).send({ error: 'sku is required' });
    return;
  }

  const upstream = await undiciRequest(`${ARCH_ORIGIN}/api/17/product/${sku}`, {
    method: 'GET',
    headers: {
      accept: 'application/json',
      'user-agent':
        (request.headers['user-agent'] as string) ??
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    },
    throwOnError: false,
  });

  const chunks: Buffer[] = [];
  for await (const chunk of upstream.body) {
    chunks.push(chunk instanceof Buffer ? chunk : Buffer.from(chunk));
  }

  reply
    .header('content-type', upstream.headers['content-type'] ?? 'application/json; charset=utf-8')
    .header('cache-control', 'public, max-age=120')
    .header('access-control-allow-origin', '*')
    .status(upstream.statusCode)
    .send(Buffer.concat(chunks));
}
