import React, { useState, useEffect } from 'react' const AdminCalendarResource = () => { const [currentDate, setCurrentDate] = useState(new Date()) const [guides, setGuides] = useState([]) const [selectedGuide, setSelectedGuide] = useState(null) const [workingDays, setWorkingDays] = useState([]) const [holidays, setHolidays] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { loadData() }, [currentDate]) const loadData = async () => { setLoading(true) try { const [guidesRes, holidaysRes] = await Promise.all([ fetch('/api/guides'), fetch('/api/holidays') ]) const guidesData = await guidesRes.json() const holidaysData = await holidaysRes.json() setGuides(guidesData.data || guidesData) setHolidays(holidaysData) if (selectedGuide) { const workingRes = await fetch(`/api/guide-working-days?guide_id=${selectedGuide}&month=${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}`) const workingData = await workingRes.json() setWorkingDays(workingData) } } catch (error) { console.error('Error loading data:', error) } setLoading(false) } const getDaysInMonth = (date) => { const year = date.getFullYear() const month = date.getMonth() const daysInMonth = new Date(year, month + 1, 0).getDate() const firstDayOfWeek = new Date(year, month, 1).getDay() const days = [] // Добавляем пустые дни в начале for (let i = 0; i < (firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1); i++) { days.push(null) } // Добавляем дни месяца for (let day = 1; day <= daysInMonth; day++) { days.push(day) } return days } const isWorkingDay = (day) => { if (!day || !selectedGuide) return false const dateStr = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}` return workingDays.some(wd => wd.work_date === dateStr) } const isHoliday = (day) => { if (!day) return false const dateStr = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}` return holidays.some(h => h.date === dateStr) } const toggleWorkingDay = async (day) => { if (!selectedGuide || !day) return const dateStr = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}` const isWorking = isWorkingDay(day) try { if (isWorking) { await fetch('/api/guide-working-days', { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ guide_id: selectedGuide, work_date: dateStr }) }) } else { await fetch('/api/guide-working-days', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ guide_id: selectedGuide, work_date: dateStr }) }) } loadData() } catch (error) { console.error('Error toggling working day:', error) } } const changeMonth = (delta) => { const newDate = new Date(currentDate) newDate.setMonth(newDate.getMonth() + delta) setCurrentDate(newDate) } const monthNames = [ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' ] const weekDays = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС'] if (loading) { return (