import { computeWorkerRankScore } from '@ehandyhire/shared';
import prisma from './prisma';

export async function syncWorkerRankScore(workerId: string) {
  const worker = await prisma.workerProfile.findUnique({
    where: { id: workerId },
    select: {
      averageRating: true,
      totalReviews: true,
      isVerified: true,
      experienceYears: true,
      isAvailable: true,
      createdAt: true,
      _count: { select: { portfolioImages: true } },
    },
  });

  if (!worker) return null;

  const rankScore = computeWorkerRankScore({
    averageRating: worker.averageRating,
    totalReviews: worker.totalReviews,
    isVerified: worker.isVerified,
    portfolioCount: worker._count.portfolioImages,
    experienceYears: worker.experienceYears,
    isAvailable: worker.isAvailable,
    createdAt: worker.createdAt,
  });

  await prisma.workerProfile.update({
    where: { id: workerId },
    data: { rankScore },
  });

  return rankScore;
}

export async function syncAllWorkerRankScores() {
  const workers = await prisma.workerProfile.findMany({
    where: { deletedAt: null },
    select: { id: true },
  });
  for (const { id } of workers) {
    await syncWorkerRankScore(id);
  }
}
