"use server";

/** Server Actions سبد خرید و آدرس‌ها — همه ورودی‌ها دوباره در سرور اعتبارسنجی می‌شوند */
import { z } from "zod";
import { addToCart, clearCart, setCartQty } from "@/server/services/cart-store";
import { deleteAddress, listAddresses, saveAddress } from "@/server/services/addresses";
import { getCurrentUser } from "@/server/auth/session";
import { addressSchema, fieldErrors } from "@/validation/common";

const variantId = z.string().min(1).max(40);
const qty = z.number().int().min(0).max(10);

export async function addToCartAction(id: string, n: number) {
  return addToCart(variantId.parse(id), qty.min(1).parse(n));
}

export async function setCartQtyAction(id: string, n: number) {
  return setCartQty(variantId.parse(id), qty.parse(n));
}

export async function clearCartAction() {
  return clearCart();
}

export async function saveAddressAction(input: unknown, id?: string) {
  const user = await getCurrentUser();
  if (!user) return { ok: false as const, errors: { _: "ابتدا وارد حساب شوید" } };
  const parsed = addressSchema.safeParse(input);
  if (!parsed.success) return { ok: false as const, errors: fieldErrors(parsed.error) };
  const savedId = await saveAddress(user.id, parsed.data, id ? z.string().max(40).parse(id) : undefined);
  return { ok: true as const, id: savedId, list: await listAddresses(user.id) };
}

export async function deleteAddressAction(id: string) {
  const user = await getCurrentUser();
  if (!user) return [];
  await deleteAddress(user.id, z.string().max(40).parse(id));
  return listAddresses(user.id);
}
