import { useMemo } from 'react'

// Hook с утилитами для таблицы поставок
export function useTableUtils() {
  // Функция для получения цвета поставки (по индексу)
  const getSupplyColor = useMemo(() => (index: number) => {
    const colors = [
      'rgb(59, 130, 246)', // blue-500
      'rgb(16, 185, 129)', // emerald-500  
      'rgb(245, 101, 101)', // red-400
      'rgb(251, 191, 36)', // amber-400
      'rgb(168, 85, 247)', // violet-500
      'rgb(236, 72, 153)', // pink-500
      'rgb(6, 182, 212)', // cyan-500
      'rgb(34, 197, 94)', // green-500
    ]
    return colors[index % colors.length]
  }, [])

  // Функция для получения фона уровня
  const getLevelBackgroundColor = useMemo(() => (level: number, supplyIndex: number) => {
    const baseOpacity = 0.05
    const levelOpacity = baseOpacity + (level * 0.02)
    const supplyColor = getSupplyColor(supplyIndex)
    
    // Конвертируем rgb в rgba с нужной прозрачностью
    const rgbMatch = supplyColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/)
    if (rgbMatch) {
      const [, r, g, b] = rgbMatch
      return `rgba(${r}, ${g}, ${b}, ${levelOpacity})`
    }
    
    return `rgba(59, 130, 246, ${levelOpacity})` // fallback
  }, [getSupplyColor])

  // Функция форматирования даты
  const formatDate = useMemo(() => (dateString: string) => {
    return new Date(dateString).toLocaleDateString('ru-RU', {
      day: '2-digit',
      month: '2-digit',
      year: 'numeric',
    })
  }, [])

  // Функция для получения названия статуса
  const getStatusText = useMemo(() => (status: string) => {
    switch (status.toLowerCase()) {
      case 'pending':
        return 'Ожидает поставщика'
      case 'supplier_approved':
        return 'Одобрена поставщиком'
      case 'logistics_confirmed':
        return 'Логистика подтверждена'
      case 'shipped':
        return 'Отгружена'
      case 'in_transit':
        return 'В пути'
      case 'delivered':
        return 'Доставлена'
      case 'cancelled':
        return 'Отменена'
      default:
        return status
    }
  }, [])

  // Функция для получения цвета статуса
  const getStatusColor = useMemo(() => (status: string) => {
    switch (status.toLowerCase()) {
      case 'pending':
        return 'bg-orange-500/20 text-orange-300 border-orange-500/30'
      case 'supplier_approved':
        return 'bg-blue-500/20 text-blue-300 border-blue-500/30'
      case 'logistics_confirmed':
        return 'bg-purple-500/20 text-purple-300 border-purple-500/30'
      case 'shipped':
        return 'bg-indigo-500/20 text-indigo-300 border-indigo-500/30'
      case 'in_transit':
        return 'bg-cyan-500/20 text-cyan-300 border-cyan-500/30'
      case 'delivered':
        return 'bg-green-500/20 text-green-300 border-green-500/30'
      case 'cancelled':
        return 'bg-red-500/20 text-red-300 border-red-500/30'
      default:
        return 'bg-gray-500/20 text-gray-300 border-gray-500/30'
    }
  }, [])

  return {
    getSupplyColor,
    getLevelBackgroundColor,
    formatDate,
    getStatusText,
    getStatusColor,
  }
}