import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";
import { getUserIdOrAdmin } from "@/lib/auth";
import { verifyPassword, hashPassword } from "@/lib/password";

export async function PUT(req: Request) {
  const userId = await getUserIdOrAdmin(req);
  if (!userId) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  try {
    const body = await req.json();
    const currentPassword: string | undefined = body?.currentPassword;
    const newPassword: string | undefined = body?.newPassword;
    if (!currentPassword || !newPassword) {
      return NextResponse.json({ error: "currentPassword and newPassword required" }, { status: 400 });
    }
    if (newPassword.length < 8 || newPassword.length > 100) {
      return NextResponse.json({ error: "password length invalid" }, { status: 400 });
    }
    const user = await prisma.user.findUnique({
      where: { userId },
      select: { passwordHash: true },
    });
    if (!user || !user.passwordHash) {
      return NextResponse.json({ error: "invalid user" }, { status: 400 });
    }
    if (!verifyPassword(currentPassword, user.passwordHash)) {
      return NextResponse.json({ error: "현재 비밀번호가 올바르지 않습니다" }, { status: 400 });
    }
    if (verifyPassword(newPassword, user.passwordHash)) {
      // 새 비밀번호가 기존과 동일
      return NextResponse.json({ error: "새 비밀번호가 기존과 동일합니다" }, { status: 400 });
    }
    await prisma.user.update({
      where: { userId },
      data: { passwordHash: hashPassword(newPassword) },
    });
    return NextResponse.json({ ok: true });
  } catch {
    return NextResponse.json({ error: "Bad Request" }, { status: 400 });
  }
}


