// Утилиты для масок ввода в формах сотрудников

// Маска для телефона в формате +7 (999) 123-45-67
export const formatPhoneInput = (value: string): string => {
  const cleaned = value.replace(/\D/g, '')

  if (cleaned.length === 0) return ''
  if (cleaned.length <= 1) return cleaned.startsWith('7') ? '+7' : cleaned
  if (cleaned.length <= 4) return `+7 (${cleaned.slice(1)}`
  if (cleaned.length <= 7) return `+7 (${cleaned.slice(1, 4)}) ${cleaned.slice(4)}`
  if (cleaned.length <= 9) return `+7 (${cleaned.slice(1, 4)}) ${cleaned.slice(4, 7)}-${cleaned.slice(7)}`
  return `+7 (${cleaned.slice(1, 4)}) ${cleaned.slice(4, 7)}-${cleaned.slice(7, 9)}-${cleaned.slice(9, 11)}`
}

// Маска для серии паспорта (4 цифры)
export const formatPassportSeries = (value: string): string => {
  const cleaned = value.replace(/\D/g, '')
  return cleaned.slice(0, 4)
}

// Маска для номера паспорта (6 цифр)
export const formatPassportNumber = (value: string): string => {
  const cleaned = value.replace(/\D/g, '')
  return cleaned.slice(0, 6)
}

// Маска для зарплаты с разделителями тысяч
export const formatSalary = (value: string): string => {
  const cleaned = value.replace(/\D/g, '')
  if (!cleaned) return ''
  return parseInt(cleaned).toLocaleString('ru-RU')
}

// Маска для имени, фамилии, отчества (только буквы, пробелы, дефисы)
export const formatNameInput = (value: string): string => {
  return value.replace(/[^а-яёА-ЯЁa-zA-Z\s-]/g, '')
}

// Валидация email
export const isValidEmail = (email: string): boolean => {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  return emailRegex.test(email)
}

// Валидация телефона
export const isValidPhone = (phone: string): boolean => {
  const phoneRegex = /^\+7\s\(\d{3}\)\s\d{3}-\d{2}-\d{2}$/
  return phoneRegex.test(phone)
}

// Валидация серии паспорта
export const isValidPassportSeries = (series: string): boolean => {
  return /^\d{4}$/.test(series)
}

// Валидация номера паспорта
export const isValidPassportNumber = (number: string): boolean => {
  return /^\d{6}$/.test(number)
}

// Валидация возраста
export const isValidBirthDate = (birthDate: string): { valid: boolean; message?: string } => {
  if (!birthDate) return { valid: true }

  const birth = new Date(birthDate)
  const today = new Date()
  const age = today.getFullYear() - birth.getFullYear()

  if (birth > today) {
    return { valid: false, message: 'Дата рождения не может быть в будущем' }
  }

  if (age < 14) {
    return { valid: false, message: 'Возраст должен быть не менее 14 лет' }
  }

  if (age > 100) {
    return { valid: false, message: 'Проверьте корректность даты рождения' }
  }

  return { valid: true }
}

// Валидация даты приема на работу
export const isValidHireDate = (hireDate: string): { valid: boolean; message?: string } => {
  if (!hireDate) return { valid: false, message: 'Дата приема на работу обязательна' }

  const hire = new Date(hireDate)
  const today = new Date()

  if (hire > today) {
    return { valid: false, message: 'Дата приема не может быть в будущем' }
  }

  return { valid: true }
}

// Валидация зарплаты
export const isValidSalary = (salary: number | undefined): { valid: boolean; message?: string } => {
  if (salary === undefined || salary === null) return { valid: true }

  if (salary < 0) {
    return { valid: false, message: 'Зарплата не может быть отрицательной' }
  }

  if (salary > 10000000) {
    return { valid: false, message: 'Слишком большая сумма зарплаты' }
  }

  return { valid: true }
}
