import React, { useState, useEffect, useMemo } from 'react';
import Button from './ui/Button';
import { Check, Sparkles, Send, MessageSquare, X } from 'lucide-react';
// --- Shared Components ---
const NetworkBackground: React.FC<{ className?: string }> = ({ className = "" }) => {
// Static node positions for consistency in other steps
const nodes = [
{ cx: "20%", cy: "20%", r: 4, fill: "#14b8a6" }, // teal
{ cx: "50%", cy: "10%", r: 6, fill: "#a855f7" }, // purple
{ cx: "80%", cy: "30%", r: 5, fill: "#f97316" }, // orange
{ cx: "30%", cy: "50%", r: 7, fill: "#3b82f6" }, // blue
{ cx: "70%", cy: "60%", r: 6, fill: "#ec4899" }, // pink
{ cx: "10%", cy: "70%", r: 5, fill: "#ef4444" }, // red
{ cx: "40%", cy: "80%", r: 4, fill: "#14b8a6" },
{ cx: "90%", cy: "80%", r: 5, fill: "#8b5cf6" },
{ cx: "60%", cy: "40%", r: 3, fill: "#eab308" },
{ cx: "25%", cy: "90%", r: 6, fill: "#3b82f6" },
];
return (
);
};
const SectionLayout: React.FC<{
number: string;
title: string;
description: React.ReactNode;
visual: React.ReactNode;
}> = ({ number, title, description, visual }) => {
return (
{/* Text Content */}
{number}
{title}
{description}
{/* Visual Content */}
);
};
// --- Step 1: Generate Focus Group ---
const Step1 = () => {
const [status, setStatus] = useState<'input' | 'creating' | 'ready'>('input');
const [inputValue, setInputValue] = useState("AI-focused startup founders in Europe");
const handleCreate = () => {
setStatus('creating');
setTimeout(() => {
setStatus('ready');
}, 2000);
};
return (
Use plain english to describe your target audience, or generate a personal focus group based on your real social media interactions.
Personalize your experience with your own LinkedIn network database.
LinkedIn and X data are going into the persona simulator.
}
visual={
<>
{/* Background for all phases, fully visible in 'ready' */}
{/* Input State */}
{/* Creating State */}
Generating Focus Group...
{/* Ready State */}
{/* Bottom Toast Overlay */}
Your Personal Focus Group is Ready
>
}
/>
);
};
// --- Step 2: Run Experiments ---
const Step2 = () => {
const [isSimulating, setIsSimulating] = useState(false);
const handleSimulate = () => {
setIsSimulating(true);
setTimeout(() => {
setIsSimulating(false);
}, 2500);
};
return (
{/* Post Card */}
Our new brand identity focuses on radical transparency and community-driven growth...
{/* Simulating Overlay */}
>
}
/>
);
};
// --- Step 3: Get Insights ---
const Step3 = () => {
return (
{/* Score Card */}
{/* Feedback Card */}
Brand Insight
"The 'transparency' angle increased trust scores by 25% among Millennial tech professionals."
>
}
/>
);
};
// --- Step 4: Forecast Outcome ---
const Step4 = () => {
const [activeVariant, setActiveVariant] = useState(0);
const variants = [
{ label: "Original", score: 52, text: "We're launching a new sustainable clothing line next month." },
{ label: "Variant 1", score: 91, text: "Radical transparency in every stitch. Meet the brand that's redefining sustainable luxury." },
{ label: "Variant 2", score: 78, text: "Style without compromise. Our eco-friendly collection arrives soon." },
];
return (
{/* Main Content Area */}
{variants[activeVariant].label}
Score: {variants[activeVariant].score}
{variants[activeVariant].text}
{/* Floating Menu */}
Select Variant
{variants.map((v, i) => (
setActiveVariant(i)}
className={`p-2 rounded cursor-pointer transition-all flex justify-between items-center group ${activeVariant === i ? 'bg-white text-black' : 'hover:bg-white/10 text-gray-400'}`}
>
{v.label}
{v.score}
))}
{/* Connecting Line Visual */}
}
/>
);
};
// --- Main Container ---
const InteractiveDemo: React.FC = () => {
return (
);
};
export default InteractiveDemo;