import crypto from 'node:crypto';
import { prisma } from '@/lib/db';
import { currentUser } from '@/lib/auth';
import { putObject } from '@/lib/storage';
import { serveKey } from '@/lib/serve';
import { rateLimit } from '@/lib/http';
import { LOGO_MAX_BYTES, logoContentType, logoType } from '@/lib/logo';
export const dynamic = 'force-dynamic';

/** Kullanıcının kapanış kartı logosu. Her yüklemede yeni anahtar: eski siparişler kendi logolarını korur. */
export async function GET(req: Request) {
  const u = await currentUser(); if (!u) return new Response('Giriş gerekli', { status: 401 });
  if (!u.logoKey) return new Response('Logo yok', { status: 404 });
  return serveKey(req, u.logoKey, logoContentType(u.logoKey));
}

export async function POST(req: Request) {
  const u = await currentUser(); if (!u) return Response.json({ error: 'Giriş gerekli' }, { status: 401 });
  if (!await rateLimit(`logo:${u.id}`, 10, 60 * 60_000)) return Response.json({ error: 'Çok fazla yükleme, biraz sonra deneyin' }, { status: 429 });
  const f = (await req.formData().catch(() => null))?.get('logo');
  if (!(f instanceof File)) return Response.json({ error: 'Logo dosyası seçin' }, { status: 400 });
  if (f.size > LOGO_MAX_BYTES) return Response.json({ error: 'Logo en fazla 2 MB olabilir' }, { status: 400 });
  const buf = Buffer.from(await f.arrayBuffer());
  const t = logoType(buf);
  if (!t) return Response.json({ error: 'PNG, JPG ya da WEBP yükleyin' }, { status: 400 });
  const key = await putObject(`logos/${u.id}/${crypto.randomBytes(6).toString('hex')}.${t.ext}`, buf, t.type);
  await prisma.user.update({ where: { id: u.id }, data: { logoKey: key } });
  return Response.json({ ok: true, key });
}

export async function DELETE() {
  const u = await currentUser(); if (!u) return Response.json({ error: 'Giriş gerekli' }, { status: 401 });
  await prisma.user.update({ where: { id: u.id }, data: { logoKey: null } });
  return Response.json({ ok: true });
}
