import { useState } from 'react' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { Label } from '@/components/ui/label' import { Input } from '@/components/ui/input' import { Textarea } from '@/components/ui/textarea' import { ArrowLeft, ArrowRight, Loader2 } from 'lucide-react' import { wordpressAPI } from '@/lib/wordpress-api' import type { SurveyData } from './SurveyPage' interface SurveyFormProps { initialData: SurveyData onSubmit: (data: SurveyData) => void onBack: () => void } export const SurveyForm = ({ initialData, onSubmit, onBack }: SurveyFormProps) => { const [formData, setFormData] = useState(initialData) const [errors, setErrors] = useState>({}) const [isSubmitting, setIsSubmitting] = useState(false) const [currentStep, setCurrentStep] = useState(1) const totalSteps = 5 const validateCurrentStep = () => { const newErrors: Record = {} switch (currentStep) { case 1: if (!formData.useCase) { newErrors.useCase = 'Please select a use case' } if (formData.useCase === 'other' && !formData.useCaseOther) { newErrors.useCaseOther = 'Please specify your use case' } break case 2: if (!formData.projectTimeline) { newErrors.projectTimeline = 'Please select a project timeline' } break case 3: if (!formData.primaryChallenge) { newErrors.primaryChallenge = 'Please select your primary challenge' } if (formData.primaryChallenge === 'other' && !formData.primaryChallengeOther) { newErrors.primaryChallengeOther = 'Please specify your challenge' } break case 4: if (!formData.purchaseInterest) { newErrors.purchaseInterest = 'Please select your interest level' } break case 5: // Email is optional, no validation needed break } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleNext = () => { if (validateCurrentStep()) { if (currentStep < totalSteps) { setCurrentStep(currentStep + 1) setErrors({}) } else { handleSubmit() } } } const handlePrevious = () => { if (currentStep > 1) { setCurrentStep(currentStep - 1) setErrors({}) } else { onBack() } } const handleSubmit = async () => { setIsSubmitting(true) try { const result = await wordpressAPI.submitSurvey(formData) if (result.success) { await wordpressAPI.markSurveyCompleted() onSubmit(formData) } else { setErrors({ submit: result.message || 'Failed to submit survey' }) } } catch (error) { console.error('Survey submission error:', error) onSubmit(formData) } finally { setIsSubmitting(false) } } const handleInputChange = (field: keyof SurveyData, value: string | boolean) => { setFormData(prev => ({ ...prev, [field]: value })) if (errors[field]) { setErrors(prev => ({ ...prev, [field]: '' })) } } const useCaseOptions = [ { value: 'mobile-app', label: 'Mobile app backend (iOS/Android)' }, { value: 'headless-wp', label: 'Headless WordPress (React/Vue/Next.js)' }, { value: 'woocommerce', label: 'WooCommerce API integration' }, { value: 'custom-dashboard', label: 'Custom dashboard/portal' }, { value: 'testing', label: 'Still testing/exploring' }, { value: 'other', label: 'Other' }, ] const timelineOptions = [ { value: 'live', label: "It's already live" }, { value: 'this-month', label: 'Launching this month' }, { value: 'next-months', label: 'Next 2-3 months' }, { value: 'experimenting', label: 'Just experimenting' }, ] const challengeOptions = [ { value: 'token-tracking', label: "Can't track active tokens/users" }, { value: 'token-refresh', label: 'Need token refresh capability' }, { value: 'token-revocation', label: 'Need token revocation system' }, { value: 'token-analytics', label: 'Need token traceability and history' }, { value: 'no-issues', label: 'No issues - it works fine' }, { value: 'other', label: 'Other' }, ] const purchaseOptions = [ { value: 'very-interested', label: 'Very interested - tell me more' }, { value: 'interested-specific', label: 'Interested if it solves my specific need' }, { value: 'maybe-later', label: 'Maybe later when project is further along' }, { value: 'happy-free', label: 'Happy with free version' }, ] const renderStep = () => { switch (currentStep) { case 1: return renderUseCase() case 2: return renderTimeline() case 3: return renderChallenge() case 4: return renderPurchaseInterest() case 5: return renderEmailCollection() default: return null } } const renderUseCase = () => (

What are you building with JWT Authentication?

Help us understand your primary use case

{useCaseOptions.map(option => ( ))} {formData.useCase === 'other' && (