import { and, eq } from "drizzle-orm";
import { headers } from "next/headers";
import { connection, NextResponse } from "next/server";
import { apiTokens } from "@/db/schema";
import { auth } from "@/shared/lib/auth/config";
import { db } from "@/shared/lib/db";

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

export async function DELETE(_request: Request, { params }: RouteParams) {
	await connection();

	const { tokenId } = await params;

	// Verificar autenticação via sessão web
	const requestHeaders = new Headers(await headers());
	const session = await auth.api.getSession({ headers: requestHeaders });

	if (!session?.user) {
		return NextResponse.json({ error: "Não autenticado" }, { status: 401 });
	}

	try {
		// Verificar se token pertence ao usuário
		const token = await db.query.apiTokens.findFirst({
			where: and(
				eq(apiTokens.id, tokenId),
				eq(apiTokens.userId, session.user.id),
			),
		});

		if (!token) {
			return NextResponse.json(
				{ error: "Token não encontrado" },
				{ status: 404 },
			);
		}

		// Revogar token (soft delete)
		await db
			.update(apiTokens)
			.set({ revokedAt: new Date() })
			.where(
				and(eq(apiTokens.id, tokenId), eq(apiTokens.userId, session.user.id)),
			);

		return NextResponse.json({
			message: "Token revogado com sucesso",
			tokenId,
		});
	} catch (error) {
		console.error("[API] Error revoking device token:", error);
		return NextResponse.json(
			{ error: "Erro ao revogar token" },
			{ status: 500 },
		);
	}
}
