// Client-side validation utilities

export interface ValidationError {
  field: string
  message: string
}

export interface ValidationResult {
  isValid: boolean
  errors: ValidationError[]
}

// Email validation regex
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/

export function validateEmail(email: string): boolean {
  return EMAIL_REGEX.test(email.trim())
}

export function validateRequired(value: string, fieldName: string): ValidationError | null {
  if (!value || value.trim().length === 0) {
    return {
      field: fieldName,
      message: `${fieldName} is required`
    }
  }
  return null
}

export function validateDemoForm(data: {
  full_name: string
  work_email: string
  company_name: string
  phone_number?: string
  message?: string
}): ValidationResult {
  const errors: ValidationError[] = []

  // Validate required fields
  const requiredFields = [
    { value: data.full_name, name: 'full_name', label: 'Full name' },
    { value: data.work_email, name: 'work_email', label: 'Work email' },
    { value: data.company_name, name: 'company_name', label: 'Company name' },
  ]

  requiredFields.forEach(field => {
    const error = validateRequired(field.value, field.label)
    if (error) {
      errors.push({
        field: field.name,
        message: error.message
      })
    }
  })

  // Validate email format if email is provided
  if (data.work_email && data.work_email.trim()) {
    if (!validateEmail(data.work_email)) {
      errors.push({
        field: 'work_email',
        message: 'Please enter a valid email address'
      })
    }
  }

  return {
    isValid: errors.length === 0,
    errors
  }
}

export function getFieldError(errors: ValidationError[], fieldName: string): string | undefined {
  const error = errors.find(err => err.field === fieldName)
  return error?.message
}
