import { NextResponse } from 'next/server';

import { prisma } from '@/lib/prisma';

interface RouteParams {
  params: Promise<{ id: string }>;
}

// GET a single user ticket by ID
export async function GET(request: Request, { params }: RouteParams) {
  try {
    // Need to await the params
    const { id } = await params;

    const userTicket = await prisma.userTicket.findUnique({
      where: { id },
      include: {
        telegramUser: {
          include: {
            userProducts: true
          }
        }
      }
    });

    if (!userTicket) {
      return NextResponse.json(
        { error: 'User ticket not found' },
        { status: 404 }
      );
    }

    return NextResponse.json(userTicket);
  } catch (error) {
    console.error('Error fetching user ticket:', error);
    return NextResponse.json(
      { error: 'Error fetching user ticket' },
      { status: 500 }
    );
  }
}

// PATCH to update a user ticket
export async function PATCH(request: Request, { params }: RouteParams) {
  try {
    // Need to await the params
    const { id } = await params;
    const body = await request.json();

    // Validate the request body
    const validFields = ['content', 'checked'];
    const updateData: any = {};
    
    Object.keys(body).forEach(key => {
      if (validFields.includes(key)) {
        updateData[key] = body[key];
      }
    });

    // Add updatedAt automatically
    updateData.updatedAt = new Date();

    const updatedTicket = await prisma.userTicket.update({
      where: { id },
      data: updateData,
      include: {
        telegramUser: true
      }
    });

    return NextResponse.json(updatedTicket);
  } catch (error) {
    console.error('Error updating user ticket:', error);
    
    // Check if it's a Prisma error for record not found
    if ((error as any).code === 'P2025') {
      return NextResponse.json(
        { error: 'User ticket not found' },
        { status: 404 }
      );
    }
    
    return NextResponse.json(
      { error: 'Error updating user ticket' },
      { status: 500 }
    );
  }
}

// DELETE a user ticket
export async function DELETE(request: Request, { params }: RouteParams) {
  try {
    // Need to await the params
    const { id } = await params;

    // Check if the ticket exists first
    const ticket = await prisma.userTicket.findUnique({
      where: { id }
    });

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

    // Delete the ticket
    await prisma.userTicket.delete({
      where: { id }
    });

    return NextResponse.json(
      { message: 'User ticket deleted successfully' },
      { status: 200 }
    );
  } catch (error) {
    console.error('Error deleting user ticket:', error);
    return NextResponse.json(
      { error: 'Error deleting user ticket' },
      { status: 500 }
    );
  }
}