import crypto from 'node:crypto';
import { currentUser } from '@/lib/auth';
import { putObject } from '@/lib/storage';
import { rateLimit } from '@/lib/http';
import { logoType } from '@/lib/logo';
import { PHOTO_MAX_BYTES } from '@/lib/photos';
export const dynamic = 'force-dynamic';

/** İlan fotoğrafı: sipariş verilmeden önce yüklenir, dönen anahtar sipariş gövdesinde gönderilir.
 *  İstemci yüklemeden önce küçültür ve JPEG'e çevirir (EXIF yönü uygulanmış hâliyle). */
export async function POST(req: Request) {
  const u = await currentUser(); if (!u) return Response.json({ error: 'Giriş gerekli' }, { status: 401 });
  if (!await rateLimit(`photo:${u.id}`, 60, 60 * 60_000)) return Response.json({ error: 'Çok fazla yükleme, biraz sonra deneyin' }, { status: 429 });
  const f = (await req.formData().catch(() => null))?.get('photo');
  if (!(f instanceof File)) return Response.json({ error: 'Fotoğraf seçin' }, { status: 400 });
  if (f.size > PHOTO_MAX_BYTES) return Response.json({ error: 'Fotoğraf çok büyük' }, { status: 400 });
  const buf = Buffer.from(await f.arrayBuffer());
  const t = logoType(buf);
  if (!t) return Response.json({ error: 'JPG, PNG ya da WEBP yükleyin' }, { status: 400 });
  const key = await putObject(`photos/${u.id}/${crypto.randomBytes(6).toString('hex')}.${t.ext}`, buf, t.type);
  return Response.json({ key });
}
