import { z } from 'zod';

const transportSchema = z.enum(['UDP', 'TCP', 'TLS']).default('UDP');
const portSchema = z.number().int().min(1).max(65535).default(5060);

export const createSipLineSchema = z.object({
  display_name: z.string().min(1).max(100),
  sip_server: z.string().min(1).max(255),
  sip_username: z.string().min(1).max(100),
  sip_password: z.string().max(255).default(''),
  outbound_proxy: z.string().max(255).optional(),
  sip_provider_label: z.string().max(100).optional().nullable(),
  sip_port: portSchema.optional(),
  sip_transport: transportSchema.optional(),
  assigned_agent_id: z.string().uuid().optional().nullable(),
  branch_id: z.string().uuid().optional().nullable(),
});

export const updateSipLineSchema = z.object({
  display_name: z.string().min(1).max(100).optional(),
  sip_server: z.string().min(1).max(255).optional(),
  sip_username: z.string().min(1).max(100).optional(),
  sip_password: z.string().max(255).optional(),
  outbound_proxy: z.string().max(255).optional(),
  sip_provider_label: z.string().max(100).optional().nullable(),
  sip_port: portSchema.optional(),
  sip_transport: transportSchema.optional(),
  assigned_agent_id: z.string().uuid().optional().nullable(),
  is_active: z.boolean().optional(),
  call_recording: z.boolean().optional(),
  call_transcription: z.boolean().optional(),
  greeting_override: z.string().optional().nullable(),
});

export const testSipConnectionSchema = z.object({
  sip_server: z.string().min(1).max(255),
  sip_username: z.string().min(1).max(100),
  sip_password: z.string().max(255).default(''),
  outbound_proxy: z.string().max(255).optional(),
  sip_port: portSchema.optional(),
  sip_transport: transportSchema.optional(),
});
