import { NextRequest, NextResponse } from 'next/server';

import { deleteRecord, getRecord, isValidEntity, updateRecord } from '../../../../../lib/local-dev-db';

export async function GET(_: NextRequest, { params }: { params: { entity: string; id: string } }) {
  if (!isValidEntity(params.entity)) {
    return NextResponse.json({ error: 'Invalid entity.' }, { status: 404 });
  }

  const record = await getRecord(params.entity, params.id);
  if (!record) {
    return NextResponse.json({ error: 'Record not found.' }, { status: 404 });
  }

  return NextResponse.json({ entity: params.entity, record });
}

export async function PUT(request: NextRequest, { params }: { params: { entity: string; id: string } }) {
  if (!isValidEntity(params.entity)) {
    return NextResponse.json({ error: 'Invalid entity.' }, { status: 404 });
  }

  const payload = (await request.json()) as Record<string, unknown>;
  const record = await updateRecord(params.entity, params.id, payload);
  if (!record) {
    return NextResponse.json({ error: 'Record not found.' }, { status: 404 });
  }

  return NextResponse.json({ entity: params.entity, record });
}

export async function DELETE(_: NextRequest, { params }: { params: { entity: string; id: string } }) {
  if (!isValidEntity(params.entity)) {
    return NextResponse.json({ error: 'Invalid entity.' }, { status: 404 });
  }

  const record = await deleteRecord(params.entity, params.id);
  if (!record) {
    return NextResponse.json({ error: 'Record not found.' }, { status: 404 });
  }

  return NextResponse.json({ entity: params.entity, record });
}
