import { isAdminEmail } from '../lib/auth.js'
import { prisma } from '../lib/prisma.js'

export async function registerAuthOAuthRoutes(fastify) {
  fastify.delete('/api/me/oauth/:provider', { preHandler: [fastify.authenticate] }, async (request, reply) => {
    const userId = request.user.sub
    const provider = request.params?.provider

    if (isAdminEmail(request.user.email)) {
      return reply.code(403).send({ error: 'Администратор не может отвязывать OAuth' })
    }
    if (provider !== 'vk' && provider !== 'yandex') {
      return reply.code(400).send({ error: 'Неизвестный провайдер' })
    }

    const oauth = await prisma.oAuthAccount.findFirst({
      where: { userId, provider },
    })
    if (!oauth) return reply.code(404).send({ error: 'Аккаунт не привязан' })

    const remainingOAuth = await prisma.oAuthAccount.count({
      where: { userId, provider: { not: provider } },
    })
    const currentUser = await prisma.user.findUnique({
      where: { id: userId },
      select: { passwordHash: true },
    })
    if (!currentUser?.passwordHash && remainingOAuth === 0) {
      return reply.code(400).send({ error: 'Нельзя удалить последний метод входа' })
    }

    await prisma.oAuthAccount.delete({ where: { id: oauth.id } })
    return { ok: true }
  })
}
