import React, { useState, useEffect } from 'react'; import { useOrg } from '../contexts/OrgContext'; import { Card, Button } from '../components/UiKit'; import { CompanyReport, Employee, Report } from '../types'; import RadarPerformanceChart from '../components/charts/RadarPerformanceChart'; import ScoreBarList from '../components/charts/ScoreBarList'; import { SAMPLE_COMPANY_REPORT } from '../constants'; import ReportDetail from './ReportDetail'; interface EmployeeDataProps { mode: 'submissions' | 'reports'; } const CompanyReportCard: React.FC<{ report: CompanyReport }> = ({ report }) => { const [isExpanded, setIsExpanded] = useState(false); return (
ZM

Company Report

Last updated: {new Date(report.createdAt).toLocaleDateString()}

{/* Overview Section - Always Visible */}

Total Employees

{report.overview.totalEmployees}

Departments

{report.overview.departmentBreakdown.length}

Avg Performance

{report.overview.averagePerformanceScore}/5

Risk Level

{report.overview.riskLevel}

{isExpanded && (
{/* Key Personnel Changes */} {report.keyPersonnelChanges && report.keyPersonnelChanges.length > 0 && (

Key Personnel Changes

{report.keyPersonnelChanges.map((change, idx) => (

{change.employeeName}

{change.role} - {change.department}

{change.changeType}

{change.impact}

))}
)} {/* Immediate Hiring Needs */} {report.immediateHiringNeeds && report.immediateHiringNeeds.length > 0 && (

Immediate Hiring Needs

{report.immediateHiringNeeds.map((need, idx) => (

{need.role}

{need.urgency} priority

{need.department}

{need.reason}

))}
)} {/* Forward Operating Plan */} {report.forwardOperatingPlan && (

Forward Operating Plan

Next Quarter Goals

    {report.forwardOperatingPlan.nextQuarterGoals.map((goal, idx) => (
  • {goal}
  • ))}

Key Initiatives

    {report.forwardOperatingPlan.keyInitiatives.map((initiative, idx) => (
  • {initiative}
  • ))}
)} {/* Organizational Strengths */} {report.organizationalStrengths && report.organizationalStrengths.length > 0 && (

Organizational Strengths

{report.organizationalStrengths.map((strength, idx) => (
{strength.icon}

{strength.area}

{strength.description}

))}
)} {/* Organizational Impact Summary */} {report.organizationalImpactSummary && (

Organizational Impact Summary

{report.organizationalImpactSummary}

)} {/* Grading Overview */} {report.gradingOverview && (

Grading Overview

{Object.entries(report.gradingOverview).map(([category, score], idx) => (
{score}/5
{category.replace(/([A-Z])/g, ' $1').trim()}
))}
)}
)}
); }; const EmployeeCard: React.FC<{ employee: Employee; report?: Report; mode: 'submissions' | 'reports'; isOwner: boolean; onGenerateReport?: (employee: Employee) => void; isGeneratingReport?: boolean; onViewReport?: (report: Report, employeeName: string) => void; }> = ({ employee, report, mode, isOwner, onGenerateReport, isGeneratingReport, onViewReport }) => { const [isExpanded, setIsExpanded] = useState(false); return (
{employee.initials}

{employee.name}

{employee.role} {employee.department && `• ${employee.department}`}

{employee.isOwner && ( Owner )}
{report && ( <> )} {isOwner && mode === 'reports' && ( )}
{isExpanded && report && (

Role & Output

{report.roleAndOutput.responsibilities}

{report.grading?.[0]?.scores && (
({ label: s.subject, value: (s.value / s.fullMark) * 100 }))} />
({ label: s.subject, value: s.value, max: s.fullMark }))} />
)}

Key Strengths

{report.insights.strengths.map((strength, idx) => ( {strength} ))}

Development Areas

{report.insights.weaknesses.map((weakness, idx) => ( {weakness} ))}

Recommendations

    {report.recommendations.map((rec, idx) => (
  • {rec}
  • ))}
)}
); }; const EmployeeData: React.FC = ({ mode }) => { const { employees, reports, user, isOwner, getFullCompanyReportHistory, generateEmployeeReport, generateCompanyReport, saveReport, orgId } = useOrg(); const [companyReport, setCompanyReport] = useState(null); const [generatingReports, setGeneratingReports] = useState>(new Set()); const [generatingCompanyReport, setGeneratingCompanyReport] = useState(false); const [selectedReport, setSelectedReport] = useState<{ report: CompanyReport | Report; type: 'company' | 'employee'; employeeName?: string } | null>(null); useEffect(() => { // Load company report for owners const loadCompanyReport = async () => { if (isOwner(user?.uid || '') && mode === 'reports') { try { const history = await getFullCompanyReportHistory(); if (history.length > 0) { setCompanyReport(history[0]); } else { // Fallback to sample report if no real report exists setCompanyReport(SAMPLE_COMPANY_REPORT); } } catch (error) { console.error('Failed to load company report:', error); setCompanyReport(SAMPLE_COMPANY_REPORT); } } }; loadCompanyReport(); }, [isOwner, user?.uid, mode, getFullCompanyReportHistory]); const handleGenerateReport = async (employee: Employee) => { setGeneratingReports(prev => new Set(prev).add(employee.id)); try { console.log('Generating report for employee:', employee.name, 'in org:', orgId); // Use the OrgContext method instead of direct API call const report = await generateEmployeeReport(employee); if (report) { console.log('Report generated and saved successfully for:', employee.name); } else { console.error('Report generation failed for:', employee.name); // Show user-friendly error alert(`Failed to generate report for ${employee.name}. Please try again.`); } } catch (error) { console.error('Error generating report:', error); alert(`Error generating report for ${employee.name}: ${error.message}`); } finally { setGeneratingReports(prev => { const newSet = new Set(prev); newSet.delete(employee.id); return newSet; }); } }; const handleGenerateCompanyReport = async () => { setGeneratingCompanyReport(true); try { console.log('Generating company report for org:', orgId); const newReport = await generateCompanyReport(); console.log('Received new company report:', newReport); setCompanyReport(newReport); console.log('Company report generated and state updated successfully'); } catch (error) { console.error('Error generating company report:', error); alert(`Error generating company report: ${error.message}`); } finally { setGeneratingCompanyReport(false); } }; const currentUserIsOwner = isOwner(user?.uid || ''); // Filter employees based on user access const visibleEmployees = currentUserIsOwner ? employees : employees.filter(emp => emp.id === user?.uid); return (

{mode === 'submissions' ? 'Employee Submissions' : 'Employee Reports'}

{mode === 'submissions' ? 'Manage employee data and submissions' : 'View AI-generated insights and reports'}

{/* Company Report - Only visible to owners in reports mode */} {currentUserIsOwner && mode === 'reports' && (
{companyReport ? (

Company Report

) : (

Generate Company Report

Create a comprehensive AI-powered report analyzing your organization's performance, strengths, and recommendations based on employee data.

)}
)} {/* Employee Cards */}

{currentUserIsOwner ? 'All Employees' : 'Your Information'}

{visibleEmployees.length === 0 ? (

No employees found.

{currentUserIsOwner && ( )}
) : ( visibleEmployees.map(employee => ( setSelectedReport({ report, type: 'employee', employeeName })} /> )) )}
{/* Report Detail Modal */} {selectedReport && ( setSelectedReport(null)} /> )}
); }; export default EmployeeData;