import { useState, useCallback } from 'react'

import type { ExpandedState } from '../types'

// Hook для управления раскрытием элементов в многоуровневой таблице
export function useExpansionState() {
  const [expandedSupplies, setExpandedSupplies] = useState<Set<string>>(new Set())
  const [expandedRoutes, setExpandedRoutes] = useState<Set<string>>(new Set())
  const [expandedSuppliers, setExpandedSuppliers] = useState<Set<string>>(new Set())
  const [expandedProducts, setExpandedProducts] = useState<Set<string>>(new Set())

  // Переключение раскрытия поставок
  const toggleSupplyExpansion = useCallback((supplyId: string) => {
    setExpandedSupplies(prev => {
      const newSet = new Set(prev)
      if (newSet.has(supplyId)) {
        newSet.delete(supplyId)
      } else {
        newSet.add(supplyId)
      }
      return newSet
    })
  }, [])

  // Переключение раскрытия маршрутов
  const toggleRouteExpansion = useCallback((routeId: string) => {
    setExpandedRoutes(prev => {
      const newSet = new Set(prev)
      if (newSet.has(routeId)) {
        newSet.delete(routeId)
      } else {
        newSet.add(routeId)
      }
      return newSet
    })
  }, [])

  // Переключение раскрытия поставщиков
  const toggleSupplierExpansion = useCallback((supplierId: string) => {
    setExpandedSuppliers(prev => {
      const newSet = new Set(prev)
      if (newSet.has(supplierId)) {
        newSet.delete(supplierId)
      } else {
        newSet.add(supplierId)
      }
      return newSet
    })
  }, [])

  // Переключение раскрытия товаров
  const toggleProductExpansion = useCallback((productId: string) => {
    setExpandedProducts(prev => {
      const newSet = new Set(prev)
      if (newSet.has(productId)) {
        newSet.delete(productId)
      } else {
        newSet.add(productId)
      }
      return newSet
    })
  }, [])

  return {
    // Состояние
    expandedSupplies,
    expandedRoutes,
    expandedSuppliers,
    expandedProducts,
    // Методы
    toggleSupplyExpansion,
    toggleRouteExpansion,
    toggleSupplierExpansion,
    toggleProductExpansion,
  }
}