/**
 * تایپ‌های کاتالوگ.
 * این تایپ‌ها عمداً هم‌شکل مدل‌های Prisma مرحله ۲ طراحی شده‌اند تا
 * جایگزینی داده نمونه با دیتابیس، فقط لایه سرویس را تغییر دهد.
 */

/** شکل ظرف محصول؛ برای ساخت تصویر برداری اختصاصی هر محصول استفاده می‌شود */
export type ProductShape =
  | "dropper"
  | "bottle"
  | "pump"
  | "tube"
  | "jar"
  | "lipstick"
  | "wand"
  | "compact"
  | "palette"
  | "perfume";

import type { ImageRef } from "@/lib/media";

export type ProductTag = "new" | "limited" | "exclusive" | "bestseller";

export interface Brand {
  id: string;
  slug: string;
  name: string;
  nameEn: string;
  country: string;
  description: string;
}

export interface Category {
  id: string;
  slug: string;
  name: string;
  parentId: string | null;
  description?: string;
}

export interface SkinType {
  id: string;
  name: string;
}

/** تنوع محصول: یا رنگ دارد یا حجم (یا هر دو) */
export interface ProductVariant {
  id: string;
  sku: string;
  colorName?: string;
  colorHex?: string;
  size?: string;
  /** قیمت به تومان (عدد صحیح) */
  price: number;
  /** قیمت قبل از تخفیف به تومان */
  compareAtPrice?: number;
  stock: number;
}

export interface Product {
  id: number;
  slug: string;
  name: string;
  brandId: string;
  categoryId: string;
  skinTypeIds: string[];
  shape: ProductShape;
  /** رنگ پایه ظرف برای تصویر برداری */
  tone: string;
  summary: string;
  description: string;
  howToUse: string;
  ingredients: string;
  /** کد IRC / شماره مجوز بهداشتی سازمان غذا و دارو (اختیاری؛ خالی = نمایش داده نمی‌شود) */
  ircCode: string;
  madeIn: string;
  tags: ProductTag[];
  variants: ProductVariant[];
  rating: number;
  reviewCount: number;
  soldCount: number;
  createdAt: string;
  /** عکس‌های آپلودشده به ترتیب؛ variantId یعنی عکس مخصوص آن رنگ/تنوع */
  images: (ImageRef & { variantId?: string })[];
}

export interface Review {
  id: string;
  productId: number;
  author: string;
  rating: number;
  title: string;
  body: string;
  createdAt: string;
  verifiedPurchase: boolean;
  skinTypeId?: string;
}

/** نسخه سبک محصول برای کارت‌ها و لیست‌ها */
export interface ProductSummary {
  id: number;
  slug: string;
  name: string;
  brand: { name: string; nameEn: string; slug: string };
  shape: ProductShape;
  tone: string;
  price: number;
  compareAtPrice?: number;
  rating: number;
  reviewCount: number;
  tags: ProductTag[];
  colorCount: number;
  inStock: boolean;
  /** عکس اصلی محصول (اگر آپلود شده باشد) */
  image?: ImageRef;
}

export interface Banner {
  id: string;
  eyebrow: string;
  title: string;
  subtitle: string;
  cta: string;
  href: string;
  theme: "dark" | "light" | "mist";
  /** محصولاتی که در ترکیب تصویری بنر نمایش داده می‌شوند */
  art: { shape: ProductShape; tone: string }[];
  /** عکس آپلودشده؛ اگر باشد به‌جای ترکیب تصویری نمایش داده می‌شود */
  image?: ImageRef;
}
