'use client';
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { databases, Query } from "../../lib/appwrite";
import { DATABASE_ID, COLLECTION_ID } from "../../lib/api";
import Header from "../../components/partials/header";
import { useTheme } from "../../context/ThemeContext";
export default function StaffBooking() {
const { darkMode } = useTheme();
const router = useRouter();
const [appointmentDate] = useState(new Date().toISOString().split('T')[0]);
const [stats, setStats] = useState({
totalTokens: 0,
booked: 0,
done: 0,
missed: 0
});
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchStats = async () => {
try {
const today = new Date().toISOString().split('T')[0];
const statsResponse = await databases.listDocuments(
DATABASE_ID,
COLLECTION_ID,
[Query.equal('date', today)]
);
const allTokens = statsResponse.documents;
const bookedTokens = allTokens.filter(t => t.status === 'booked');
const doneTokens = allTokens.filter(t => t.status === 'done');
const missedTokens = allTokens.filter(t => t.status === 'missed');
setStats({
totalTokens: allTokens.length,
booked: bookedTokens.length,
done: doneTokens.length,
missed: missedTokens.length
});
} catch (error) {
console.error("Error fetching statistics:", error);
} finally {
setLoading(false);
}
};
fetchStats();
}, []);
if (loading) {
return
;
}
return (
{/* Statistics Overview */}
{/*
Today's Overview
Total Tokens
{stats.totalTokens}
*/}
{/* Booking Options */}
New Booking
router.push('/pages/SingleBooking')}
className={`p-6 cursor-pointer rounded-lg border transition-all hover:shadow-md ${darkMode ?
'bg-gray-800 border-gray-700 hover:border-blue-600 hover:bg-gray-700' :
'bg-white border-gray-200 hover:border-blue-500 hover:bg-blue-50'
}`}
>
Single Booking
Book one token for a patient
router.push('/pages/MultiBooking')}
className={`p-6 cursor-pointer rounded-lg border transition-all hover:shadow-md ${darkMode ?
'bg-gray-800 border-gray-700 hover:border-blue-600 hover:bg-gray-700' :
'bg-white border-gray-200 hover:border-blue-500 hover:bg-blue-50'
}`}
>
Multi Booking
Book multiple tokens at once
Staff can book tokens for patients. Choose single booking for individual patients or multi-booking for group entries.
All tokens will be assigned for {new Date(appointmentDate).toLocaleDateString()}.
);
}