import { z } from 'zod';

/**
 * EN: DTO for creating a new feature
 * VI: DTO để tạo feature mới
 */
export const createFeatureDtoSchema = z.object({
  name: z.string().min(1, 'Name is required / Tên là bắt buộc').max(100, 'Name must be less than 100 characters / Tên phải ít hơn 100 ký tự'),
  title: z.string().max(200, 'Title must be less than 200 characters / Tiêu đề phải ít hơn 200 ký tự').optional(),
  description: z.string().max(1000, 'Description must be less than 1000 characters / Mô tả phải ít hơn 1000 ký tự').optional(),
  config: z.record(z.string(), z.any()).optional(),
  tags: z.array(z.string()).optional(),
});

export type CreateFeatureDto = z.infer<typeof createFeatureDtoSchema>;

/**
 * EN: DTO for updating a feature
 * VI: DTO để cập nhật feature
 */
export const updateFeatureDtoSchema = z.object({
  title: z.string().max(200, 'Title must be less than 200 characters / Tiêu đề phải ít hơn 200 ký tự').optional(),
  description: z.string().max(1000, 'Description must be less than 1000 characters / Mô tả phải ít hơn 1000 ký tự').optional(),
  config: z.record(z.string(), z.any()).optional(),
  enabled: z.boolean().optional(),
  tags: z.array(z.string()).optional(),
});

export type UpdateFeatureDto = z.infer<typeof updateFeatureDtoSchema>;

/**
 * EN: Query parameters for feature listing
 * VI: Tham số query để liệt kê features
 */
export const getFeaturesQuerySchema = z.object({
  enabled: z.string().transform(val => val === 'true').optional(),
  tags: z.string().transform(val => val ? val.split(',') : undefined).optional(),
  limit: z.string().transform(Number).optional(),
  offset: z.string().transform(Number).optional(),
});

export type GetFeaturesQuery = z.infer<typeof getFeaturesQuerySchema>;
