import { useState } from 'react'; import { useFrameEntries } from '@/business/frame/hooks'; import { useSafetyQuizCompliance } from '@/business/safety-quiz/hooks'; import { usePersonalityCompletion } from '@/business/personality/queryHooks'; import { useZoneCheckInCompletion } from '@/business/zone-checkin/hooks'; import { useStaffAttendanceRecords, useStaffAttendanceSummary, } from '@/business/staff-attendance/hooks'; import { usePolicyAcknowledgmentReport } from '@/business/policies/hooks'; import { buildDirectorFramePreviews, buildDirectorOverviewCards, buildDirectorQuizResults, buildDirectorRiskAreas, } from '@/business/director-dashboard/selectors'; import type { DirectorDashboardPage } from '@/business/director-dashboard/types'; import { DIRECTOR_DASHBOARD_QUICK_ACTIONS, type DirectorDashboardTimeRange, } from '@/shared/constants/directorDashboard'; import { useAuth } from '@/shared/app/useAuth'; import { getLeadershipDashboardName } from '@/business/app-shell/selectors'; import { getActiveTenant } from '@/business/scope/selectors'; import { useScopeContext } from '@/shared/app/scope-context'; import { DEFAULT_PRODUCT_ROLE } from '@/shared/constants/roles'; import { getCurrentSafetyQuizWeek } from '@/business/safety-quiz/selectors'; export function useDirectorDashboardPage(): DirectorDashboardPage { const { user, profile } = useAuth(); const { effectiveTenant } = useScopeContext(); const role = profile?.role ?? DEFAULT_PRODUCT_ROLE; const title = getLeadershipDashboardName(role); const activeTenant = effectiveTenant ?? getActiveTenant(user); const scopeLabel = activeTenant?.name ?? ''; const scopeKey = activeTenant ? `${activeTenant.level}:${activeTenant.id}` : null; const [timeRange, setTimeRangeState] = useState('month'); const safetyQuizWeek = getCurrentSafetyQuizWeek(new Date()); const frameEntriesQuery = useFrameEntries(); const quizCompletionQuery = useSafetyQuizCompliance(safetyQuizWeek, true); const emotionalIntelligenceCompletionQuery = usePersonalityCompletion(true); const zoneCheckinCompletionQuery = useZoneCheckInCompletion(true, scopeKey); const staffAttendanceRecordsQuery = useStaffAttendanceRecords(); const staffAttendanceSummaryQuery = useStaffAttendanceSummary(); const acknowledgmentReportQuery = usePolicyAcknowledgmentReport(); const frameEntries = frameEntriesQuery.data ?? []; const quizRows = quizCompletionQuery.data?.rows ?? []; const emotionalIntelligenceCompletion = emotionalIntelligenceCompletionQuery.data ?? null; const zoneCheckinCompletion = zoneCheckinCompletionQuery.data ?? null; const quizSummary = quizCompletionQuery.data?.summary ?? { totalStaff: 0, completedCount: 0, pendingCount: 0, completionRate: 0, }; const attendanceRecords = staffAttendanceRecordsQuery.data ?? []; const isLoading = frameEntriesQuery.isLoading || quizCompletionQuery.isLoading || emotionalIntelligenceCompletionQuery.isLoading || zoneCheckinCompletionQuery.isLoading || staffAttendanceRecordsQuery.isLoading || staffAttendanceSummaryQuery.isLoading || acknowledgmentReportQuery.isLoading; const error = frameEntriesQuery.error ?? quizCompletionQuery.error ?? emotionalIntelligenceCompletionQuery.error ?? zoneCheckinCompletionQuery.error ?? staffAttendanceRecordsQuery.error ?? staffAttendanceSummaryQuery.error ?? acknowledgmentReportQuery.error; return { title, scopeLabel, timeRange, overviewCards: buildDirectorOverviewCards( attendanceRecords, quizSummary, frameEntries, acknowledgmentReportQuery.data?.summary, ), riskAreas: buildDirectorRiskAreas( attendanceRecords, quizSummary, emotionalIntelligenceCompletion, zoneCheckinCompletion, ), framePreviews: buildDirectorFramePreviews(frameEntries), quickActions: DIRECTOR_DASHBOARD_QUICK_ACTIONS, quizResults: buildDirectorQuizResults(quizRows, emotionalIntelligenceCompletion, zoneCheckinCompletion), isLoading, error, setTimeRange: setTimeRangeState, }; }