// =============================================================================
// 🧑‍💼 EMPLOYEE DATA HOOK V2
// =============================================================================
// Хук для управления данными сотрудников с фильтрацией и пагинацией

'use client'

import { useQuery } from '@apollo/client'
import { useMemo } from 'react'

import { GET_EMPLOYEES_V2 } from '@/graphql/queries/employees-v2'

import type { EmployeesFilterInput, UseEmployeeDataReturn, EmployeeV2 } from '../types'

export function useEmployeeData(filters: EmployeesFilterInput = {}): UseEmployeeDataReturn {
  const { 
    data, 
    loading, 
    error, 
    refetch, 
  } = useQuery(GET_EMPLOYEES_V2, {
    variables: { input: filters },
    fetchPolicy: 'cache-and-network',
    errorPolicy: 'all',
    notifyOnNetworkStatusChange: true,
  })

  // Мемоизация данных для оптимизации
  const employees = useMemo(() => {
    return data?.employeesV2?.items || []
  }, [data?.employeesV2?.items])

  const pagination = useMemo(() => {
    return data?.employeesV2?.pagination || null
  }, [data?.employeesV2?.pagination])

  const stats = useMemo(() => {
    return data?.employeesV2?.stats || null
  }, [data?.employeesV2?.stats])

  // Функция обновления с сохранением фильтров
  const handleRefetch = () => {
    refetch({ input: filters })
  }

  return {
    employees,
    pagination,
    stats,
    loading,
    error,
    refetch: handleRefetch,
  }
}

// =============================================================================
// 🔍 СПЕЦИАЛИЗИРОВАННЫЕ ХУКИ
// =============================================================================

// Хук для активных сотрудников (часто используется)
export function useActiveEmployees() {
  return useEmployeeData({
    status: ['ACTIVE'],
    sortBy: 'NAME',
    sortOrder: 'asc',
  })
}

// Хук для поиска сотрудников
export function useEmployeeSearch(searchQuery: string) {
  return useEmployeeData({
    search: searchQuery,
    status: ['ACTIVE'],
    limit: 50, // больше лимит для поиска
  })
}

// Хук для статистики сотрудников
export function useEmployeeStats() {
  const { stats, loading } = useEmployeeData({
    limit: 1, // минимальный запрос для получения только статистики
  })

  return {
    stats,
    loading,
  }
}