import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useOrg } from '../contexts/OrgContext'; import { EnhancedFigmaQuestion, FigmaQuestionCard, EnhancedFigmaInput } from '../components/figma/EnhancedFigmaQuestion'; import { FigmaInput, FigmaSelect } from '../components/figma/FigmaInput'; import { FigmaMultipleChoice } from '../components/figma/FigmaMultipleChoice'; interface OnboardingData { // Step 0: Company Details companyName: string; yourName: string; // Step 1: Company Size companySize: string; // Step 2: Mission mission: string; // Later steps industry: string; description: string; vision: string; values: string[]; foundingYear: string; evolution: string; majorMilestones: string; advantages: string; vulnerabilities: string; competitors: string; marketPosition: string; currentChallenges: string[]; shortTermGoals: string; longTermGoals: string; keyMetrics: string; cultureDescription: string; workEnvironment: string; leadershipStyle: string; communicationStyle: string; additionalContext: string; } const Onboarding: React.FC = () => { const { org, upsertOrg, generateCompanyWiki } = useOrg(); const navigate = useNavigate(); useEffect(() => { if (org?.onboardingCompleted) { navigate('/reports', { replace: true }); } }, [org, navigate]); const [step, setStep] = useState(0); const [isGeneratingReport, setIsGeneratingReport] = useState(false); const [formData, setFormData] = useState({ companyName: org?.name || '', yourName: '', companySize: '', mission: '', industry: '', description: '', vision: '', values: [], foundingYear: '', evolution: '', majorMilestones: '', advantages: '', vulnerabilities: '', competitors: '', marketPosition: '', currentChallenges: [], shortTermGoals: '', longTermGoals: '', keyMetrics: '', cultureDescription: '', workEnvironment: '', leadershipStyle: '', communicationStyle: '', additionalContext: '' }); const steps = [ { title: 'Company Details', description: 'Basic information about your company' }, { title: 'Company Size', description: 'How many people work at your company' }, { title: 'Mission Statement', description: 'What is the mission of your company' }, { title: 'Vision & Values', description: 'Your company\'s vision and core values' }, { title: 'Company History', description: 'How your company has evolved' }, { title: 'Market Position', description: 'Your competitive landscape' }, { title: 'Goals & Challenges', description: 'Current objectives and obstacles' }, { title: 'Team & Culture', description: 'Your work environment and culture' } ]; const handleNext = async () => { if (isGeneratingReport) return; if (step < steps.length - 1) { setStep(prev => prev + 1); return; } // Final step: persist org & generate report setIsGeneratingReport(true); try { const newOrgData = { name: formData.companyName, industry: formData.industry, size: formData.companySize, description: formData.description, mission: formData.mission, vision: formData.vision, values: formData.values.join(','), foundingYear: formData.foundingYear, evolution: formData.evolution, majorMilestones: formData.majorMilestones, advantages: formData.advantages, vulnerabilities: formData.vulnerabilities, competitors: formData.competitors, marketPosition: formData.marketPosition, currentChallenges: formData.currentChallenges.join(','), shortTermGoals: formData.shortTermGoals, longTermGoals: formData.longTermGoals, keyMetrics: formData.keyMetrics, cultureDescription: formData.cultureDescription, workEnvironment: formData.workEnvironment, leadershipStyle: formData.leadershipStyle, communicationStyle: formData.communicationStyle, additionalContext: formData.additionalContext, onboardingCompleted: true }; await upsertOrg(newOrgData); await generateCompanyWiki({ ...newOrgData, orgId: org!.orgId }); setTimeout(() => { navigate('/reports', { replace: true }); }, 100); } catch (error) { console.error('Error completing onboarding:', error); const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; alert(`There was an error completing the setup: ${errorMessage}. Please check the console for more details and try again.`); } finally { setIsGeneratingReport(false); } }; const handleBack = () => { if (step > 0) setStep(step - 1); }; const updateFormData = (field: keyof OnboardingData, value: string) => { setFormData(prev => ({ ...prev, [field]: value })); }; const canProceed = () => { switch (step) { case 0: // Company Details return formData.companyName.trim().length > 0 && formData.yourName.trim().length > 0; case 1: // Company Size return formData.companySize.length > 0; case 2: // Mission return formData.mission.trim().length > 0; case 3: // Vision & Values return formData.vision.trim().length > 0; case 4: // History return formData.evolution.trim().length > 0; case 5: // Market Position return formData.advantages.trim().length > 0; case 6: // Goals return formData.shortTermGoals.trim().length > 0; case 7: // Culture return formData.cultureDescription.trim().length > 0; default: return false; } }; const renderStepContent = () => { switch (step) { case 0: // Company Details return (
updateFormData('yourName', e.target.value)} required /> updateFormData('companyName', e.target.value)} required />
); case 1: // Company Size return ( updateFormData('companySize', value)} /> ); case 2: // Mission return ( updateFormData('mission', value)} multiline rows={6} /> ); case 3: // Vision & Values return (
updateFormData('vision', value)} multiline rows={4} />
); case 4: // History return ( updateFormData('evolution', value)} multiline rows={6} /> ); case 5: // Market Position return ( updateFormData('advantages', value)} multiline rows={6} /> ); case 6: // Goals return ( updateFormData('shortTermGoals', value)} multiline rows={6} /> ); case 7: // Culture return ( updateFormData('cultureDescription', value)} multiline rows={6} /> ); default: return null; } }; // Question text for each step const getQuestionText = () => { switch (step) { case 0: return 'Company Details'; case 1: return `How many people work at ${formData.companyName || '[Company Name]'}?`; case 2: return 'What is the mission of your company?'; case 3: return 'What is your company\'s vision?'; case 4: return 'How has your company evolved?'; case 5: return 'What are your competitive advantages?'; case 6: return 'What are your short-term goals?'; case 7: return 'Describe your company culture'; default: return 'Onboarding'; } }; return (
0} nextText={ isGeneratingReport ? 'Generating...' : step === steps.length - 1 ? 'Complete Setup' : 'Next' } > {renderStepContent()}
); }; export default Onboarding;