import { useEffect, useState } from 'react'; import { timeElapsed } from '../utils/dateUtils'; // Make sure it calculates in hours import { THRESH_HOLD } from '../utils/constants'; // THRESH_HOLD in hours (e.g., 12, 48, or 60) export const ACTIONS = { CHECK_IN: 0, CHECK_OUT: 1, REGULARIZATION: 2, REQUESTED: 3, APPROVED: 4, REJECTED: 5 }; const useAttendanceStatus = (attendanceData) => { const [status, setStatus] = useState({ status: "Unknown", action: null, disabled: true, text: "Unknown", color: 'btn-secondary', }); useEffect(() => { const { checkInTime, checkOutTime, activity } = attendanceData; const now = new Date(); const isSameDay = (date1, date2) => new Date(date1).toDateString() === new Date(date2).toDateString(); // 1. No check-in/check-out yet → Allow Check-In if (activity === 0 && !checkInTime && !checkOutTime) { return setStatus({ status: "Check-In", action: ACTIONS.CHECK_IN, disabled: false, text: "Check In", color: 'btn-primary', }); } // 2. Checked in, no checkout yet if (checkInTime && !checkOutTime) { if (timeElapsed(checkInTime, THRESH_HOLD)) { return setStatus({ status: "Request Regularize", action: ACTIONS.REGULARIZATION, disabled: false, text: "Regularize", color: 'btn-warning', }); } else { return setStatus({ status: "Check-Out", action: ACTIONS.CHECK_OUT, disabled: false, text: "Check Out", color: 'btn-primary', }); } } // 3. Already checked in and out → Handle activity === 4 (Approved) if (checkInTime && checkOutTime && activity === 4) { if (!isSameDay(checkInTime, now) && !timeElapsed(checkInTime, THRESH_HOLD)) { // Case: Past day, but still within threshold → Approved return setStatus({ status: "Approved", action: ACTIONS.APPROVED, disabled: true, text: "Approved", color: 'btn-success', }); } else if (isSameDay(checkOutTime, now)) { // Case: same day → allow check-in again return setStatus({ status: "Check In", action: ACTIONS.CHECK_IN, disabled: false, text: "Check In", color: 'btn-primary', }); } else { // Case: not same day AND over 48 hours → freeze status as Approved return setStatus({ status: "Approved", action: ACTIONS.APPROVED, disabled: true, text: "Approved", color: 'btn-success', }); } } // 4. Regularization Requested if (activity === 2) { return setStatus({ status: "Requested", action: ACTIONS.REQUESTED, disabled: true, text: "Requested", color: 'btn-info', }); } // 5. Rejected Regularization if (activity === 5) { return setStatus({ status: "Rejected", action: ACTIONS.REJECTED, disabled: true, text: "Rejected", color: 'btn-danger', }); } // Default to Approved if none of the above apply return setStatus({ status: "Approved", action: ACTIONS.APPROVED, disabled: true, text: "Approved", color: 'btn-success', }); }, [attendanceData]); return status; }; export default useAttendanceStatus;