/**
 * Утилиты для работы со статистикой
 */

import { BASE_STATS_DATA } from '@constants/constants.ts';

/**
 * Функция для правильного склонения существительных в зависимости от числа
 * @param number - число, перед которым будет существительное
 * @param titles - массив из 3 вариантов существительного: [один, два-четыре, пять-ноль]
 * @returns правильная форма существительного
 */
export function getDeclension(number: number, titles: [string, string, string]): string {
  const cases = [2, 0, 1, 1, 1, 2];
  const n = Math.abs(number);
  const index = n % 100 > 4 && n % 100 < 20 ? 2 : cases[n % 10 < 5 ? n % 10 : 5];
  return titles[index];
}

/**
 * Функция для получения правильного склонения слова "год" в зависимости от числа
 * @param number - число лет
 * @returns правильная форма слова "год"
 */
export function getYearDeclension(number: number): string {
  return getDeclension(number, ['год', 'года', 'лет']);
}

/**
 * Вычисляет динамические значения статистики с учетом увеличения на 5% каждый год
 */
export const getDynamicStats = () => {
  const currentYear = new Date().getFullYear();
  const nextYearStart = new Date(currentYear + 1, 0, 1); // 1 января следующего года
  const now = new Date();
  
  // Если текущая дата после 1 января следующего года, применяем увеличение
  const yearsSinceBase = nextYearStart <= now ? 1 : 0;
  
  return BASE_STATS_DATA.map(stat => {
    let newValue = stat.number;
    
    // Увеличиваем значение на 5% за каждый год
    for (let i = 0; i < yearsSinceBase; i++) {
      newValue = Math.floor(newValue * 1.05);
    }
    
    // Ограничиваем рост для процентов (не более 99%)
    if (stat.suffix === '%' && newValue > 99) {
      newValue = 99;
    }
    
    return {
      ...stat,
      number: newValue
    };
  });
};

/**
 * Получает конкретное значение статистики по индексу
 */
export const getStatByIndex = (index: number) => {
  const dynamicStats = getDynamicStats();
  return dynamicStats[index];
};

/**
 * Получает только статистику для AboutHero (индексы 1 и 2 - "Успешных дел" и "Клиентов")
 */
export const getAboutHeroStats = () => {
  const dynamicStats = getDynamicStats();
  // Возвращаем "Успешных дел" и "Клиентов" (индексы 1 и 2)
  return [dynamicStats[1], dynamicStats[2]];
};

/**
 * Получает количество лет практики с 2005 года
 */
export const getYearsOfPractice = () => {
  const currentYear = new Date().getFullYear();
  return currentYear - 2005;
};

/**
 * Функция для получения правильного склонения слова "клиент" в зависимости от числа
 * @param number - число клиентов
 * @returns правильная форма слова "клиент"
 */
export function getClientDeclension(number: number): string {
  return getDeclension(number, ['клиент', 'клиента', 'клиентов']);
}

/**
 * Функция для получения правильного склонения слова "дело" в зависимости от числа
 * @param number - число дел
 * @returns правильная форма слова "дело"
 */
export function getCaseDeclension(number: number): string {
  return getDeclension(number, ['дело', 'дела', 'дел']);
}