import { NextResponse } from 'next/server';
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export async function GET(
    request: Request,
    { params }: { params: Promise<{ id: string }> }
) {
    try {
        const { id } = await params;
        const specialId = parseInt(id);

        const special = await prisma.special.findUnique({
            where: { id: specialId },
            include: {
                songs: {
                    include: {
                        song: true
                    },
                    orderBy: {
                        order: 'asc'
                    }
                }
            }
        });

        if (!special) {
            return NextResponse.json({ error: 'Special not found' }, { status: 404 });
        }

        return NextResponse.json(special);
    } catch (error) {
        console.error('Error fetching special:', error);
        return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
    }
}

export async function PUT(
    request: Request,
    { params }: { params: Promise<{ id: string }> }
) {
    try {
        const { id } = await params;
        const specialId = parseInt(id);
        const { name, maxAttempts, unlockSteps, launchDate, endDate, curator, hidden } = await request.json();

        const updateData: any = {};
        if (name !== undefined) updateData.name = name;
        if (maxAttempts !== undefined) updateData.maxAttempts = maxAttempts;
        if (unlockSteps !== undefined) updateData.unlockSteps = typeof unlockSteps === 'string' ? unlockSteps : JSON.stringify(unlockSteps);
        if (launchDate !== undefined) updateData.launchDate = launchDate ? new Date(launchDate) : null;
        if (endDate !== undefined) updateData.endDate = endDate ? new Date(endDate) : null;
        if (curator !== undefined) updateData.curator = curator || null;
        if (hidden !== undefined) updateData.hidden = Boolean(hidden);

        const special = await prisma.special.update({
            where: { id: specialId },
            data: updateData
        });

        return NextResponse.json(special);
    } catch (error) {
        console.error('Error updating special:', error);
        return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
    }
}
