import { NextRequest, NextResponse } from 'next/server';
import { verifyAdminToken } from '@/lib/verifyAdmin';
import { bd } from '@/lib/bd';
import type { ResultSetHeader } from 'mysql2';
import fs from 'fs/promises';
import path from 'path';

export async function POST(req: NextRequest) {
    const token = req.cookies.get('token')?.value;
    if (!verifyAdminToken(token)) {
        return NextResponse.json({ error: 'Доступ запрещён' }, { status: 401 });
    }

    const formData = await req.formData();

    const title = formData.get('title');
    const platform = formData.get('platform');
    const image = formData.get('image') as File | null;

    if (
        typeof title !== 'string' ||
        typeof platform !== 'string' ||
        !image ||
        typeof image !== 'object'
    ) {
        return NextResponse.json({ error: 'Заполните все поля корректно' }, { status: 400 });
    }

    const bytes = await image.arrayBuffer();
    const buffer = Buffer.from(bytes);
    const fileName = `${Date.now()}-${image.name.replace(/\s+/g, '_')}`;
    const uploadDir = path.join(process.cwd(), 'uploads/games');
    const filePath = path.join(uploadDir, fileName);

    try {
        // создаём директорию если её нет
        await fs.mkdir(uploadDir, { recursive: true });

        // сохраняем файл
        await fs.writeFile(filePath, buffer);

        const [result] = await bd.query<ResultSetHeader>(
            'INSERT INTO games (title, image_url, platform) VALUES (?, ?, ?)',
            [title, fileName, platform]
        );

        return NextResponse.json({
            id: result.insertId,
            title,
            platform,
            image_url: fileName,
        });
    } catch (err) {
        console.error('Ошибка при сохранении файла или в базе данных:', err);
        return NextResponse.json({ error: 'Ошибка сервера' }, { status: 500 });
    }
}
