/**
 * Product domain entities
 */

export interface Product {
  id: string;
  name: string;
  description: string;
  price: number;
  currency: 'USD' | 'EUR' | 'GBP';
  sku: string;
  category: ProductCategory;
  brand: string;
  images: ProductImage[];
  inventory: ProductInventory;
  specifications: ProductSpecification[];
  isActive: boolean;
  isFeatured: boolean;
  createdAt: string;
  updatedAt: string;
}

export interface ProductCategory {
  id: string;
  name: string;
  slug: string;
  description?: string;
  parentId?: string;
}

export interface ProductImage {
  id: string;
  url: string;
  alt: string;
  isPrimary: boolean;
  order: number;
}

export interface ProductInventory {
  quantity: number;
  reserved: number;
  available: number;
  lowStockThreshold: number;
  isInStock: boolean;
}

export interface ProductSpecification {
  name: string;
  value: string;
  unit?: string;
}

export interface ProductCreationData {
  name: string;
  description: string;
  price: number;
  currency: 'USD' | 'EUR' | 'GBP';
  sku: string;
  categoryId: string;
  brand: string;
  specifications?: ProductSpecification[];
  inventory: {
    quantity: number;
    lowStockThreshold: number;
  };
}

export interface ProductUpdateData {
  name?: string;
  description?: string;
  price?: number;
  categoryId?: string;
  brand?: string;
  specifications?: ProductSpecification[];
  isActive?: boolean;
  isFeatured?: boolean;
}

export interface ProductFilter {
  categoryId?: string;
  brand?: string;
  minPrice?: number;
  maxPrice?: number;
  inStock?: boolean;
  isFeatured?: boolean;
  search?: string;
}

export interface ProductSort {
  field: 'name' | 'price' | 'createdAt' | 'popularity';
  direction: 'asc' | 'desc';
} 