/**
 * System Config DTOs
 *
 * Data Transfer Objects and validation schemas for system configuration
 */

import { z } from 'zod';

export const SystemConfigCategory = z.enum([
  'platform',
  'ai',
  'notifications',
  'gamification',
  'security',
  'limits',
  'system',
  'other'
]);

export const SystemConfigDataType = z.enum([
  'string',
  'number',
  'boolean',
  'json',
  'date'
]);

export const SystemConfigSchema = z.object({
  key: z.string()
    .min(1, 'La clave es requerida')
    .max(100, 'La clave no puede exceder 100 caracteres')
    .regex(/^[a-z0-9._-]+$/, 'Solo minúsculas, números, puntos, guiones bajos y guiones'),
  value: z.string()
    .min(1, 'El valor es requerido')
    .max(10000, 'El valor no puede exceder 10000 caracteres'),
  description: z.string()
    .max(500, 'La descripción no puede exceder 500 caracteres')
    .optional(),
  category: SystemConfigCategory.optional(),
  isPublic: z.boolean().default(false),
  isEncrypted: z.boolean().default(false),
  dataType: SystemConfigDataType.default('string'),
});

export const SystemConfigUpdateSchema = SystemConfigSchema.partial();

export const SystemConfigKeySchema = z.object({
  key: z.string().min(1),
});

export type SystemConfigInput = z.infer<typeof SystemConfigSchema>;
export type SystemConfigUpdateInput = z.infer<typeof SystemConfigUpdateSchema>;
export type SystemConfigCategoryType = z.infer<typeof SystemConfigCategory>;
export type SystemConfigDataTypeType = z.infer<typeof SystemConfigDataType>;
