import { z } from 'zod';

export const providersConfigSchema = z.object({
  // Storage providers
  storage: z.object({
    type: z.enum(['local', 's3', 'gcs', 'azure']).default('local'),
    local: z.object({
      basePath: z.string().default('/tmp/wcag-ada'),
      reports: z.string().default('reports'),
      screenshots: z.string().default('screenshots'),
      exports: z.string().default('exports'),
    }).default({}),
    s3: z.object({
      enabled: z.boolean().default(false),
      bucket: z.string().optional(),
      region: z.string().default('us-east-1'),
      accessKeyId: z.string().optional(),
      secretAccessKey: z.string().optional(),
      endpoint: z.string().optional(),
    }).default({}),
  }).default({}),
  
  // Email providers
  email: z.object({
    enabled: z.boolean().default(true),
    provider: z.enum(['smtp', 'sendgrid', 'ses', 'postmark']).default('smtp'),
    from: z.object({
      name: z.string().default('WCAG-ADA Compliance'),
      email: z.string().email().default('noreply@wcag-ada.com'),
    }).default({}),
    smtp: z.object({
      host: z.string().default('localhost'),
      port: z.number().default(587),
      secure: z.boolean().default(false),
      auth: z.object({
        user: z.string().optional(),
        pass: z.string().optional(),
      }).default({}),
    }).default({}),
    sendgrid: z.object({
      apiKey: z.string().optional(),
    }).default({}),
  }).default({}),
  
  // Authentication providers
  auth: z.object({
    jwt: z.object({
      secret: z.string().default('change-me-in-production'),
      expiresIn: z.string().default('7d'),
      refreshExpiresIn: z.string().default('30d'),
    }).default({}),
    oauth: z.object({
      google: z.object({
        enabled: z.boolean().default(false),
        clientId: z.string().optional(),
        clientSecret: z.string().optional(),
      }).default({}),
      github: z.object({
        enabled: z.boolean().default(false),
        clientId: z.string().optional(),
        clientSecret: z.string().optional(),
      }).default({}),
    }).default({}),
  }).default({}),
  
  // Analytics providers
  analytics: z.object({
    enabled: z.boolean().default(true),
    provider: z.enum(['posthog', 'mixpanel', 'amplitude', 'custom']).default('posthog'),
    posthog: z.object({
      apiKey: z.string().optional(),
      host: z.string().default('https://app.posthog.com'),
    }).default({}),
  }).default({}),
  
  // CDN providers
  cdn: z.object({
    enabled: z.boolean().default(false),
    provider: z.enum(['cloudflare', 'cloudfront', 'fastly']).default('cloudflare'),
    baseUrl: z.string().optional(),
  }).default({}),
});

export type ProvidersConfig = z.infer<typeof providersConfigSchema>;