import React, { useState, useEffect } from 'react'; import { Box, Paper, Typography, Button, Grid, Card, CardContent, Stack, Chip, Divider, CircularProgress, Alert, } from '@mui/material'; import { Campaign, AutoAwesome, PhotoLibrary, Assessment, TrendingUp, CheckCircle, RadioButtonUnchecked, PhotoCamera, } from '@mui/icons-material'; import { motion } from 'framer-motion'; import { ImageStudioLayout } from '../ImageStudio/ImageStudioLayout'; import { GlassyCard } from '../ImageStudio/ui/GlassyCard'; import { SectionHeader } from '../ImageStudio/ui/SectionHeader'; import { useProductMarketing } from '../../hooks/useProductMarketing'; import { CampaignWizard } from './CampaignWizard'; import { AssetAuditPanel } from './AssetAuditPanel'; import { ProposalReview } from './ProposalReview'; import { useNavigate } from 'react-router-dom'; const MotionCard = motion(Card); interface CampaignSummary { campaign_id: string; campaign_name: string; goal: string; status: string; total_assets: number; completed_assets: number; channels: string[]; } export const ProductMarketingDashboard: React.FC = () => { const { getBrandDNA, brandDNA, isLoadingBrandDNA, listCampaigns, campaigns: apiCampaigns, isLoadingCampaigns, } = useProductMarketing(); const [showWizard, setShowWizard] = useState(false); const [showAssetAudit, setShowAssetAudit] = useState(false); const [reviewCampaignId, setReviewCampaignId] = useState(null); const navigate = useNavigate(); useEffect(() => { // Load brand DNA on mount if (!brandDNA) { getBrandDNA(); } // Load campaigns on mount listCampaigns(); }, [brandDNA, getBrandDNA, listCampaigns]); const handleCreateCampaign = () => { setShowWizard(true); }; const handleJourneySelect = (journey: string) => { if (journey === 'launch') { setShowWizard(true); } else if (journey === 'photoshoot') { navigate('/campaign-creator/photoshoot'); } else if (journey === 'optimize') { // TODO: Show optimization insights alert('Optimization insights coming soon!'); } }; const handleWizardComplete = (blueprint: any) => { setShowWizard(false); // Reload campaigns from API listCampaigns(); // Navigate to proposal review setReviewCampaignId(blueprint.campaign_id); }; if (showWizard) { return setShowWizard(false)} />; } if (showAssetAudit) { return setShowAssetAudit(false)} />; } if (reviewCampaignId) { return ( { setReviewCampaignId(null); listCampaigns(); }} onComplete={() => { setReviewCampaignId(null); listCampaigns(); }} /> ); } return ( {/* Brand DNA Status */} {isLoadingBrandDNA ? ( ) : brandDNA ? ( Brand DNA loaded: {brandDNA.persona?.persona_name || 'Default Persona'} •{' '} {brandDNA.writing_style?.tone || 'professional'} tone • {brandDNA.target_audience?.industry_focus || 'general'} industry ) : ( Brand DNA not available. Complete onboarding to enable personalized campaigns. )} {/* User Journey Selection */} handleJourneySelect('launch')} > Journey A: Launch Campaign Create a new marketing campaign from scratch. AI generates personalized assets based on your brand DNA. setShowAssetAudit(true)} > Journey B: Enhance Assets Upload existing assets for AI-powered quality assessment and enhancement recommendations. handleJourneySelect('photoshoot')} > Journey C: Product Photoshoot Generate professional product images for e-commerce listings and marketing campaigns. handleJourneySelect('optimize')} > Journey D: Optimize Get AI-powered insights and suggestions to optimize your existing campaigns and assets. {/* Quick Actions */} Create Campaign Launch a new marketing campaign with AI-generated assets personalized to your brand. setShowAssetAudit(true)} > Audit Assets Upload existing assets for AI-powered quality assessment and enhancement recommendations. {/* Active Campaigns */} {isLoadingCampaigns ? ( ) : apiCampaigns.length === 0 ? ( No campaigns yet Create your first campaign to start generating personalized marketing assets ) : ( {apiCampaigns.map((campaign) => ( {campaign.campaign_name} {campaign.goal} Progress n.status === 'ready' || n.status === 'approved').length || 0) / (campaign.asset_nodes?.length || 1)) * 100}%`, background: 'linear-gradient(90deg, #7c3aed, #a78bfa)', transition: 'width 0.3s ease', }} /> {campaign.asset_nodes?.filter((n: any) => n.status === 'ready' || n.status === 'approved').length || 0}/{campaign.asset_nodes?.length || 0} Channels {campaign.channels.map((channel) => ( ))} ))} )} ); };