import React, { useState, useEffect } from 'react'; import { useRestaurant } from '../../../contexts/RestaurantContext'; import StatisticsCard from './StatisticsCard'; import TablesManager from './TablesManager'; import { Box, useTheme, useMediaQuery, Button, ButtonGroup, TextField } from '@mui/material'; import authService from '../../../services/authService'; import dayjs from 'dayjs'; const AnalyticsPage = () => { const { restaurantId } = useRestaurant(); const [timeFrame, setTimeFrame] = useState('12m'); // '12m', '30d', '24h' const [customDate, setCustomDate] = useState(dayjs().format('YYYY-MM-DD')); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const [chartData, setChartData] = useState([]); const handleTimeFrameChange = (newTimeFrame) => { setTimeFrame(newTimeFrame); }; const handleCustomDateChange = (event) => { setCustomDate(event.target.value); }; const fetchStatistics = async () => { if (!restaurantId) return; let period = 'daily'; let labels = []; let mappedData = []; switch (timeFrame) { case '24h': // يومي period = 'daily'; labels = Array.from({ length: 24 }, (_, i) => `${i.toString().padStart(2, '0')}:00`); try { const response = await authService.getReservationStatistics(restaurantId, period, customDate); if (response.success && response.data.length > 0) { mappedData = response.data.map(item => ({ label: item.label || item.date || '', reservations_total: item.reservations_total || 0, number_of_people_total: item.number_of_people_total || 0 })); } else { mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } } catch (error) { console.error(error); mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } break; case '30d': // شهري period = 'monthly'; labels = Array.from({ length: 30 }, (_, i) => dayjs().startOf('month').add(i, 'day').format('MM-DD')); try { const response = await authService.getReservationStatistics(restaurantId, period, customDate); if (response.success && response.data.length > 0) { mappedData = response.data.map(item => ({ label: item.label ? dayjs(item.label).format('MM-DD') : item.date ? dayjs(item.date).format('MM-DD') : '', reservations_total: item.reservations_total || 0, number_of_people_total: item.number_of_people_total || 0 })); } else { mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } } catch (error) { console.error(error); mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } break; case '12m': // سنوي default: period = 'yearly'; labels = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; try { const response = await authService.getReservationStatistics(restaurantId, period, customDate); if (response.success && response.data.length > 0) { mappedData = response.data.map(item => ({ label: item.label || item.date || '', reservations_total: item.reservations_total || 0, number_of_people_total: item.number_of_people_total || 0 })); } else { mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } } catch (error) { console.error(error); mappedData = labels.map(label => ({ label, reservations_total: 0, number_of_people_total: 0 })); } break; } setChartData(mappedData); }; useEffect(() => { fetchStatistics(); }, [timeFrame, restaurantId, customDate]); return ( {/* Tables Manager */} {restaurantId && } {/* Header Buttons */} {[{ label: '12 Months', value: '12m' }, { label: '30 Days', value: '30d' }, { label: '24 Hours', value: '24h' }].map(({ label, value }) => ( ))} {/* Date Picker + Today Button */} {/* StatisticsCard */} value} timeFrame={timeFrame} onTimeFrameChange={handleTimeFrameChange} /> ); }; export default AnalyticsPage;