"use client"; import MobileShiftView from "@/components/organisms/shift-schedule/MobileShiftView"; import MonthlyCalendar from "@/components/organisms/shift-schedule/MonthlyCalendar"; import ShiftCreateModal from "@/components/organisms/shift-schedule/ShiftCreateModal"; import ShiftDetailModal from "@/components/organisms/shift-schedule/ShiftDetailModal"; import WeeklySchedule from "@/components/organisms/shift-schedule/WeeklySchedule"; import { useAuth } from "@/lib/auth-context"; import { useShift } from "@/lib/shift-context"; import type { ShiftEntity } from "@/lib/types"; import Link from "next/link"; import { useState } from "react"; const MONTH_NAMES = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; function getMonday(d: Date): Date { const date = new Date(d); const day = date.getDay(); const diff = date.getDate() - day + (day === 0 ? -6 : 1); date.setDate(diff); return date; } function formatDateShort(d: Date): string { return `${d.getDate().toString().padStart(2, "0")}/${(d.getMonth() + 1).toString().padStart(2, "0")}`; } export default function StaffSchedulePage() { const { user, logout } = useAuth(); const { view, setView, currentDate, goToNextWeek, goToPrevWeek, goToNextMonth, goToPrevMonth, goToToday, getWeeklyBudget, shifts, } = useShift(); const [selectedShift, setSelectedShift] = useState(null); const [detailOpen, setDetailOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false); const [createDate, setCreateDate] = useState(); const isManager = user?.role === "manager"; const handleShiftClick = (shift: ShiftEntity) => { setSelectedShift(shift); setDetailOpen(true); }; const handleCreateShift = (date: Date) => { setCreateDate(date); setCreateOpen(true); }; const handleDateSelect = (date: Date) => { if (isManager) { setCreateDate(date); setCreateOpen(true); } }; const monday = getMonday(currentDate); const sunday = new Date(monday); sunday.setDate(monday.getDate() + 6); const weekLabel = `${formatDateShort(monday)} – ${formatDateShort(sunday)}`; const weeklyBudget = getWeeklyBudget(); // Count shifts this week for stats const totalShiftsThisWeek = shifts.filter((s) => { if (!s.date) return false; const d = s.date instanceof Date ? s.date : new Date(s.date as unknown as string); return d >= monday && d <= sunday; }).length; return (
{/* ── Sidebar (Desktop) ─────────────────────────────────────────────────── */} {/* ── Main content ──────────────────────────────────────────────────────── */}
{/* Header */}
{/* Title */}

{isManager ? "Manage Shifts" : "Register Shifts"}

{view === "week" ? `Week: ${weekLabel}` : `Month: ${MONTH_NAMES[currentDate.getMonth()]} ${currentDate.getFullYear()}`}

{/* Mobile view toggle */}
{/* Desktop navigation arrows */}
{/* Create shift (manager, desktop) */} {isManager && ( )} {/* Mobile navigation arrows */}
{/* Content */}
{/* Desktop */}
{view === "week" ? ( ) : ( )}
{/* Mobile */}
{view === "week" ? ( ) : ( )}
{/* FAB for mobile manager */} {isManager && ( )}
{/* Modals */} { setDetailOpen(false); setSelectedShift(null); }} /> setCreateOpen(false)} defaultDate={createDate} />
); }