import { z } from 'zod';

export const createVariantSchema = z.object({
  bookId: z.string().uuid('Valid book ID is required').optional(),
  title: z.string().min(2, 'Variant title is required').optional(),
  format: z.enum(['HARDCOVER', 'PAPERBACK', 'EBOOK', 'AUDIOBOOK'], {
    errorMap: () => ({ message: 'Format must be HARDCOVER, PAPERBACK, EBOOK, or AUDIOBOOK' }),
  }),
  isbn: z.string().optional().nullable(),
  sku: z.string().min(1, 'SKU is required'),
  barcode: z.string().optional().nullable(),
  price: z.number().positive('Price must be greater than 0'),
  discountPrice: z.number().positive().optional().nullable(),
  stock: z.number().int().nonnegative('Stock cannot be negative').default(0),
  weight: z.number().positive().optional().nullable(),
  dimensions: z.string().optional().nullable(),
  coverImage: z.string().url().optional().nullable(),
  digitalFileUrl: z.string().url().optional().nullable(),
  digitalFormat: z.enum(['PDF', 'EPUB', 'MOBI', 'AZW3', 'MP3']).optional().nullable(),
  attributes: z.record(z.any()).optional().nullable(),
  isDefault: z.boolean().optional().default(false),
  isActive: z.boolean().optional().default(true),
});

export const updateVariantSchema = createVariantSchema.partial();

export const updateVariantStockSchema = z.object({
  stock: z.number().int().nonnegative('Stock cannot be negative'),
  lowStockAlert: z.number().int().nonnegative().optional(),
});
