import { NextRequest, NextResponse } from 'next/server';
import { ResultDto } from '@/types/response/common';
import { fetchJson } from '@/lib/utils/server';

export async function GET(request: NextRequest, { params }: { params: Promise<{ path?: string[] }> }) {
	const { path } = await params;
	const endpoint = `/api/forum/posts/${(path ?? []).join('/')}`;
	const url = new URL(request.url);

	const res: ResultDto = await fetchJson(`${endpoint}${url.search}`, {
		method: 'GET'
	});

	return NextResponse.json(res);
}

export async function POST(request: NextRequest, { params }: { params: Promise<{ path?: string[] }> }) {
	const { path } = await params;
	const endpoint = `/api/forum/posts/${(path ?? []).join('/')}`;

	const res: ResultDto = await fetchJson(endpoint, {
		method: 'POST',
		body: await request.arrayBuffer(),
		headers: { 'Content-Type': request.headers.get('content-type') || '' }
	});

	return NextResponse.json(res);
}

export async function PUT(request: NextRequest, { params }: { params: Promise<{ path?: string[] }> }) {
	const { path } = await params;
	const endpoint = `/api/forum/posts/${(path ?? []).join('/')}`;

	const res: ResultDto = await fetchJson(endpoint, {
		method: 'PUT',
		body: await request.arrayBuffer(),
		headers: { 'Content-Type': request.headers.get('content-type') || '' }
	});

	return NextResponse.json(res);
}

export async function DELETE(_: NextRequest, { params }: { params: Promise<{ path?: string[] }> }) {
	const { path } = await params;
	const endpoint = `/api/forum/posts/${(path ?? []).join('/')}`;

	const res: ResultDto = await fetchJson(endpoint, {
		method: 'DELETE'
	});

	return NextResponse.json(res);
}
