import { z } from 'zod';

export const workerConfigSchema = z.object({
  enabled: z.boolean().default(true),
  concurrency: z.number().min(1).max(10).default(2),
  queueName: z.string().default('accessibility-scans'),
  redis: z.object({
    host: z.string().default('localhost'),
    port: z.number().default(6379),
    password: z.string().optional(),
    db: z.number().default(2), // Different DB for WCAG
    maxRetriesPerRequest: z.number().nullable().default(null),
  }).default({}),
  jobs: z.object({
    scan: z.object({
      priority: z.number().default(0),
      attempts: z.number().default(3),
      backoff: z.object({
        type: z.enum(['exponential', 'fixed']).default('exponential'),
        delay: z.number().default(2000),
      }).default({}),
      timeout: z.number().default(300000), // 5 minutes
      removeOnComplete: z.object({
        age: z.number().default(86400), // 24 hours
        count: z.number().default(100),
      }).default({}),
      removeOnFail: z.object({
        age: z.number().default(604800), // 7 days
        count: z.number().default(500),
      }).default({}),
    }).default({}),
    report: z.object({
      priority: z.number().default(1),
      attempts: z.number().default(2),
      backoff: z.object({
        type: z.enum(['exponential', 'fixed']).default('exponential'),
        delay: z.number().default(5000),
      }).default({}),
      timeout: z.number().default(600000), // 10 minutes
    }).default({}),
  }).default({}),
  scheduler: z.object({
    enabled: z.boolean().default(true),
    interval: z.number().default(60000), // Check every minute
    timezone: z.string().default('UTC'),
  }).default({}),
});

export type WorkerConfig = z.infer<typeof workerConfigSchema>;