import { z } from 'zod';

export const scannerConfigSchema = z.object({
  concurrency: z.number().min(1).max(10).default(2),
  timeout: z.number().min(30000).default(120000), // 2 minutes default
  pageLoadTimeout: z.number().min(10000).default(30000),
  headless: z.boolean().default(true),
  blockResources: z.boolean().default(true),
  viewport: z.object({
    width: z.number().default(1280),
    height: z.number().default(720),
    deviceScaleFactor: z.number().default(1),
  }).default({}),
  browsers: z.object({
    chromium: z.object({
      enabled: z.boolean().default(true),
      args: z.array(z.string()).default(['--no-sandbox', '--disable-setuid-sandbox']),
    }).default({}),
  }).default({}),
  axe: z.object({
    tags: z.array(z.string()).default(['wcag2aa', 'wcag21aa']),
    resultTypes: z.array(z.enum(['violations', 'passes', 'incomplete', 'inapplicable']))
      .default(['violations', 'passes', 'incomplete', 'inapplicable']),
  }).default({}),
  retries: z.object({
    maxAttempts: z.number().default(3),
    backoff: z.object({
      type: z.enum(['exponential', 'fixed']).default('exponential'),
      delay: z.number().default(2000),
    }).default({}),
  }).default({}),
});

export type ScannerConfig = z.infer<typeof scannerConfigSchema>;