/**
 * [BE-P002] 商品管理扩展Schema
 * 支持多平台多店铺的商品管理功能
 * AI注意: Schema驱动开发，所有类型从Schema推导
 */

import { z } from 'zod';
import { ProductSchema, ProductStatusSchema } from './product.schema';

// 商品状态扩展 - 支持电商平台状态
const ProductManagementStatusSchema = z.enum([
  'DRAFT',
  'PRICED', 
  'LISTED',
  'SYNCING',
  'LIVE',
  'SYNC_FAILED',
  'OFFLINE'
] as const);

// 平台状态Schema
const PlatformStatusSchema = z.record(z.string(), z.string());

// 店铺Schema
const ShopSchema = z.object({
  id: z.string(),
  name: z.string(),
  platform: z.string(),
  status: z.enum(['ACTIVE', 'INACTIVE', 'SUSPENDED'] as const),
  region: z.string(),
  currency: z.string()
});

// 扩展商品Schema - 支持多平台多店铺
const ExtendedProductSchema = ProductSchema.extend({
  // 电商平台特有字段
  costPrice: z.number().positive().optional(),
  profit: z.number().optional(),
  roi: z.number().optional(),
  platformStatus: PlatformStatusSchema.optional(),
  shopId: z.string(),
  shopName: z.string(),
  platform: z.string(),
  
  // 状态管理
  managementStatus: ProductManagementStatusSchema,
  
  // 时间字段使用string格式（前端兼容）
  createdAt: z.string().datetime(),
  updatedAt: z.string().datetime()
});

// 商品筛选参数Schema
const ProductFilterParamsSchema = z.object({
  keyword: z.string().optional(),
  category: z.array(z.string()).optional(),
  platform: z.array(z.string()).optional(),
  shop: z.array(z.string()).optional(),
  status: z.array(ProductManagementStatusSchema).optional(),
  priceRange: z.tuple([z.number(), z.number()]).optional(),
  dateRange: z.tuple([z.string().datetime(), z.string().datetime()]).optional(),
  page: z.number().int().positive().optional().default(1),
  pageSize: z.number().int().positive().max(100).optional().default(10)
});

// 商品排序参数Schema
const ProductSortParamsSchema = z.object({
  field: z.string(),
  order: z.enum(['ascend', 'descend'] as const).nullable()
});

// 商品统计Schema
const ProductStatisticsSchema = z.object({
  totalProducts: z.number().int().nonnegative(),
  draft: z.number().int().nonnegative(),
  priced: z.number().int().nonnegative(),
  listed: z.number().int().nonnegative(),
  live: z.number().int().nonnegative(),
  offline: z.number().int().nonnegative(),
  totalValue: z.number().nonnegative(),
  totalProfit: z.number().nonnegative()
});

// 导出类型定义
const ProductManagementSchema = z.object({
  ExtendedProduct: ExtendedProductSchema,
  ProductFilterParams: ProductFilterParamsSchema,
  ProductSortParams: ProductSortParamsSchema,
  ProductStatistics: ProductStatisticsSchema,
  Shop: ShopSchema
});

// 导出类型
export type ExtendedProduct = z.infer<typeof ExtendedProductSchema>;
export type ProductFilterParams = z.infer<typeof ProductFilterParamsSchema>;
export type ProductSortParams = z.infer<typeof ProductSortParamsSchema>;
export type ProductStatistics = z.infer<typeof ProductStatisticsSchema>;
export type Shop = z.infer<typeof ShopSchema>;
export type ProductManagementStatus = z.infer<typeof ProductManagementStatusSchema>;

// 导出Schema
export {
  ExtendedProductSchema,
  ProductFilterParamsSchema,
  ProductSortParamsSchema,
  ProductStatisticsSchema,
  ShopSchema,
  ProductManagementStatusSchema
};