'use client'
import { useQuery } from '@apollo/client'
import { Building2, ShoppingCart, Package, Wrench, RotateCcw, Clock, FileText, CheckCircle, ChevronRight, Home } from 'lucide-react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import React from 'react'
import { Sidebar } from '@/components/dashboard/sidebar'
import { GET_PENDING_SUPPLIES_COUNT } from '@/graphql/queries'
import { useRealtime } from '@/hooks/useRealtime'
import { useSidebar } from '@/hooks/useSidebar'
// Компонент для отображения бейджа с уведомлениями
function NotificationBadge({ count }: { count: number }) {
if (count === 0) return null
return (
{count > 99 ? '99+' : count}
)
}
// Breadcrumbs компонент
function Breadcrumbs({ pathname }: { pathname: string }) {
const getBreadcrumbs = (path: string) => {
const segments = path.split('/').filter(Boolean)
const breadcrumbs = [
{ name: 'Главная', href: '/dashboard', icon: Home }
]
if (segments[0] === 'fulfillment-supplies') {
breadcrumbs.push({ name: 'Входящие поставки', href: '/fulfillment-supplies', icon: Building2 })
if (segments[1]) {
const categoryMap: Record = {
'goods': 'Товары',
'detailed-supplies': 'Расходники фулфилмента',
'consumables': 'Расходники селлеров',
'returns': 'Возвраты с ПВЗ'
}
const category = categoryMap[segments[1]]
if (category) {
breadcrumbs.push({
name: category,
href: segments[2] ? `/fulfillment-supplies/${segments[1]}` : path,
icon: Package
})
if (segments[1] === 'goods' && segments[2]) {
const subcategoryMap: Record = {
'new': 'Новые',
'receiving': 'Приёмка',
'received': 'Принято'
}
const subcategory = subcategoryMap[segments[2]]
if (subcategory) {
breadcrumbs.push({ name: subcategory, href: path, icon: Clock })
}
}
}
}
}
return breadcrumbs
}
const breadcrumbs = getBreadcrumbs(pathname)
return (
)
}
export function FulfillmentSuppliesLayout({ children }: { children: React.ReactNode }) {
const { getSidebarMargin } = useSidebar()
const pathname = usePathname()
// Загружаем данные о непринятых поставках
const { data: pendingData, error: pendingError, refetch: refetchPending } = useQuery(GET_PENDING_SUPPLIES_COUNT, {
fetchPolicy: 'cache-first',
errorPolicy: 'ignore',
onError: (error) => {
console.error('❌ GET_PENDING_SUPPLIES_COUNT Error:', error)
},
})
// Realtime: обновление бейджа
useRealtime({
onEvent: (evt) => {
if (evt.type === 'supply-order:new' || evt.type === 'supply-order:updated') {
refetchPending()
}
},
})
// Логируем ошибку для диагностики
React.useEffect(() => {
if (pendingError) {
console.error('🚨 Ошибка загрузки счетчиков поставок:', pendingError)
}
}, [pendingError])
// Для фулфилмента считаем только поставки, НЕ заявки на партнерство
const pendingCount = pendingData?.pendingSuppliesCount?.supplyOrders || 0
const ourSupplyOrdersCount = pendingData?.pendingSuppliesCount?.ourSupplyOrders || 0
const sellerSupplyOrdersCount = pendingData?.pendingSuppliesCount?.sellerSupplyOrders || 0
// Определяем активные табы на основе pathname
const getActiveTab = () => {
if (pathname.startsWith('/fulfillment-supplies/goods')) return 'fulfillment'
if (pathname.includes('/detailed-supplies')) return 'fulfillment'
if (pathname.includes('/consumables')) return 'fulfillment'
if (pathname.includes('/returns')) return 'fulfillment'
return 'fulfillment'
}
const getActiveSubTab = () => {
if (pathname.startsWith('/fulfillment-supplies/goods')) return 'goods'
if (pathname.includes('/detailed-supplies')) return 'detailed-supplies'
if (pathname.includes('/consumables')) return 'consumables'
if (pathname.includes('/returns')) return 'returns'
return 'goods'
}
const getActiveThirdTab = () => {
if (pathname.includes('/goods/new')) return 'new'
if (pathname.includes('/goods/receiving')) return 'receiving'
if (pathname.includes('/goods/received')) return 'received'
return 'new'
}
const activeTab = getActiveTab()
const activeSubTab = getActiveSubTab()
const activeThirdTab = getActiveThirdTab()
return (
{/* Breadcrumbs */}
{/* БЛОК 1: ТАБЫ ВСЕХ УРОВНЕЙ */}
{/* УРОВЕНЬ 1: Главные табы */}
Поставки на фулфилмент
Фулфилмент
{/* УРОВЕНЬ 2: Подтабы */}
{activeTab === 'fulfillment' && (
Товар
Т
Расходники фулфилмента
Фулфилмент
Ф
Расходники селлеров
Селлеры
С
Возвраты с ПВЗ
В
)}
{/* УРОВЕНЬ 3: Подподтабы для товаров */}
{activeTab === 'fulfillment' && activeSubTab === 'goods' && (
Новые
Н
Приёмка
П
Принято
Пр
)}
{/* БЛОК 2: ОСНОВНОЙ КОНТЕНТ */}
)
}