"use server";

/** Server Actions حساب کاربری: ثبت نظر و ویرایش نام */
import { revalidatePath } from "next/cache";
import { z } from "zod";
import { db } from "@/lib/db";
import { getCurrentUser } from "@/server/auth/session";
import { fieldErrors, nameSchema, reviewSchema } from "@/validation/common";

type Result = { ok: true } | { ok: false; errors: Record<string, string> };

/** نظر با وضعیت «در انتظار تأیید» ثبت می‌شود و پس از تأیید در پنل مدیریت نمایش داده می‌شود */
export async function submitReviewAction(rawProductId: number, input: unknown): Promise<Result> {
  const user = await getCurrentUser();
  if (!user) return { ok: false, errors: { _: "برای ثبت نظر وارد حساب شوید" } };
  const productId = z.number().int().positive().parse(rawProductId);
  const parsed = reviewSchema.safeParse(input);
  if (!parsed.success) return { ok: false, errors: fieldErrors(parsed.error) };

  const pending = await db.review.count({ where: { productId, userId: user.id, status: "PENDING" } });
  if (pending > 0) return { ok: false, errors: { _: "نظر قبلی شما برای این محصول در انتظار تأیید است" } };

  // «خریدار این کالا» فقط اگر سفارش تحویل‌شده‌ای از همین محصول داشته باشد
  const bought = await db.orderItem.count({ where: { variant: { productId }, order: { userId: user.id, status: "DELIVERED" } } });
  await db.review.create({
    data: {
      productId,
      userId: user.id,
      authorName: user.name || "کاربر زهورا",
      ...parsed.data,
      verifiedPurchase: bought > 0,
      status: "PENDING",
    },
  });
  return { ok: true };
}

export async function updateNameAction(raw: string): Promise<Result> {
  const user = await getCurrentUser();
  if (!user) return { ok: false, errors: { _: "ابتدا وارد حساب شوید" } };
  const parsed = nameSchema.safeParse(raw);
  if (!parsed.success) return { ok: false, errors: { name: parsed.error.issues[0].message } };
  await db.user.update({ where: { id: user.id }, data: { name: parsed.data } });
  revalidatePath("/account");
  return { ok: true };
}
