import { z } from 'zod';

export const proxyConfigSchema = z.object({
  enabled: z.boolean().default(false),
  cachePrefix: z.string().optional().default('proxy:'),
  ttl: z.number().optional().default(3600),
  webshare: z
    .object({
      apiKey: z.string(),
      apiUrl: z.string().default('https://proxy.webshare.io/api/v2/'),
    })
    .optional(),
});

export const browserConfigSchema = z.object({
  headless: z.boolean().optional().default(true),
  timeout: z.number().optional().default(30000),
});

export const queueConfigSchema = z.object({
  enabled: z.boolean().optional().default(true),
  workers: z.number().optional().default(1),
  concurrency: z.number().optional().default(1),
  enableScheduledJobs: z.boolean().optional().default(true),
  defaultJobOptions: z
    .object({
      attempts: z.number().default(3),
      backoff: z
        .object({
          type: z.enum(['exponential', 'fixed']).default('exponential'),
          delay: z.number().default(1000),
        })
        .default({}),
      removeOnComplete: z.number().default(100),
      removeOnFail: z.number().default(100),
      timeout: z.number().optional(),
    })
    .optional()
    .default({}),
});

export type ProxyConfig = z.infer<typeof proxyConfigSchema>;
export type BrowserConfig = z.infer<typeof browserConfigSchema>;
export type QueueConfig = z.infer<typeof queueConfigSchema>;
