function CampaignPreview({ campaign: c, onClose, tips }) { const tip = tips.find(t => t.adId === c.id); const roas = Number(c.roas); const roasColor = roas < 1.5 ? 'var(--neg)' : roas >= 3.5 ? 'var(--pos)' : 'var(--accent-strong)'; // Simple sparkline — mock 7-day trend based on ROAS const spark = Array.from({ length: 7 }, (_, i) => { const base = Number(c.revenue) / 7; return base * (0.7 + Math.sin(i * 0.9 + roas) * 0.3 + i * 0.04); }); const sparkMax = Math.max(...spark); const sparkMin = Math.min(...spark); const H = 60, W = 240; const sx = (i) => (i / 6) * W; const sy = (v) => H - ((v - sparkMin) / (sparkMax - sparkMin + 1)) * H * 0.85 - 4; const sparkPath = spark.map((v, i) => `${i ? 'L' : 'M'}${sx(i).toFixed(1)},${sy(v).toFixed(1)}`).join(' '); const sparkArea = sparkPath + ` L${W},${H} L0,${H} Z`; const kpis = [ { label:'ค่าโฆษณา', en:'SPEND', value:`฿${Number(c.spend).toLocaleString()}`, color:'var(--ink)' }, { label:'รายได้', en:'REVENUE', value:`฿${Number(c.revenue).toLocaleString()}`, color:'var(--pos)' }, { label:'ROAS', en:'RETURN', value:`${Number(c.roas).toFixed(2)}x`, color:roasColor }, { label:'CTR', en:'CLICK RATE', value:`${c.ctr}%`, color:'var(--ink)' }, { label:'CPC', en:'COST/CLICK', value:`฿${c.cpc}`, color:'var(--ink)' }, { label:'Conversions', en:'CONV.', value:String(c.conversions), color:'var(--info)' }, ]; return ( <> {/* backdrop */}
{/* panel */}
{/* panel header */}
{c.name}
{c.status || 'ACTIVE'} ID: {c.adSetId || c.id}
{/* body */}
{/* KPI grid */}
{kpis.map((k, i) => (
{k.en}
{k.value}
{k.label}
))}
{/* 7-day sparkline */}
แนวโน้ม 7 วัน
{spark.map((v, i) => ( ))}
{['จ.','อ.','พ.','พฤ.','ศ.','ส.','อา.'].map((d, i) => ( {d} ))}
{/* AI insight for this campaign */} {tip ? (
{tip.actionType === 'adjust_budget' ? : } {tip.issue}
{tip.recommendation}
) : (
กด "ให้ AI ช่วยวิเคราะห์" เพื่อดูคำแนะนำสำหรับแคมเปญนี้
)} {/* Meta Ads API fields (ready for real data) */}
META ADS FIELDS · API READY
{[ { k:'Campaign ID', v: c.campaignId || 'ยังไม่ได้เชื่อมต่อ' }, { k:'Ad Set ID', v: c.adSetId || 'ยังไม่ได้เชื่อมต่อ' }, { k:'Objective', v: c.objective || 'CONVERSIONS' }, { k:'Bid Strategy', v: c.bidStrategy || 'LOWEST_COST_WITH_BID_CAP' }, ].map((row, i) => (
{row.k} {row.v}
))}
{/* Actions */}
QUICK ACTIONS
ดูใน Meta Ads Manager
); } /* ============================ SETTINGS ============================ */