const SI_WEIGHTS={icp:25,opportunity:20,pain:15,readiness:15,engagement:10,strategic:15};
function ScoringScreen(){const{PageHeader,Button,Slider,Alert,KpiCard}=window.VRticeDesignSystem_d763eb;const{toast,go}=useShell();const P=useProspects();const[model,setModel]=React.useState(null),[w,setW]=React.useState(SI_WEIGHTS),[busy,setBusy]=React.useState(false);React.useEffect(()=>{window.VxSalesIntelligence.getScoreModel().then(x=>{if(x){setModel(x);setW({icp:Number(x.weights.icp||25),opportunity:Number(x.weights.opportunity||20),pain:Number(x.weights.pain||15),readiness:Number(x.weights.readiness||15),engagement:Number(x.weights.engagement||10),strategic:Number(x.weights.strategic||15)})}})},[]);const sum=Object.values(w).reduce((a,b)=>a+b,0);const sc=p=>sum?Math.round((w.icp*p.icp+w.opportunity*p.opp+w.pain*p.pain+w.readiness*p.readiness+w.engagement*p.eng+w.strategic*p.strategic)/sum):0;const save=async()=>{if(!model)return;try{setBusy(true);await window.VxSalesIntelligence.saveScoreModel(model.id,{icp:w.icp,opportunity:w.opportunity,pain:w.pain,readiness:w.readiness,engagement:w.engagement,strategic:w.strategic},model.criteria);toast('Modelo de decisão salvo')}catch(e){toast(e.message||'Não foi possível salvar','ph-warning')}finally{setBusy(false)}};const dims=[['icp','ICP Fit','Aderência objetiva ao ICP v1.1'],['opportunity','Opportunity','Intensidade e recência do mercado público'],['pain','Pain Propensity','Propensão observável a complexidade operacional'],['readiness','Readiness','Preparação da conta para uma abordagem'],['engagement','Engagement','Sinais de interação real'],['strategic','Strategic Fit','Prioridade estratégica definida pelo Vértice']];const rows=[...P].sort((a,b)=>sc(b)-sc(a)).slice(0,15);return <BlockGrid.Auto id="scoring"><PageHeader size="lg" eyebrow="COMERCIAL · SALES INTELLIGENCE" title="Decision Engine" description="Seis dimensões para decidir quem abordar, por quê, quando e com qual intensidade." actions={<><Button variant="ghost" onClick={()=>setW(SI_WEIGHTS)}>Restaurar</Button><PBtn perm="commercial_intelligence.manage" loading={busy} onClick={save}>Salvar modelo</PBtn></>}/><div style={cxGrid(180)}>{dims.slice(0,6).map(d=><KpiCard key={d[0]} compact label={d[1]} value={w[d[0]]+'%'}/>)}</div><div style={{display:'flex',flexWrap:'wrap',gap:20,alignItems:'flex-start',marginTop:20}}><CcPanel title="Pesos do modelo" sub="A soma é normalizada para 100%." style={{flex:'1 1 380px'}} gap={22}>{dims.map(([k,l,h])=><Slider key={k} label={l} hint={h} valueLabel={w[k]+'%'} min={0} max={100} value={w[k]} onChange={v=>setW(x=>({...x,[k]:v}))}/>)}{sum!==100&&<Alert tone="warning">Os pesos somam {sum}%. O cálculo normaliza automaticamente.</Alert>}</CcPanel><CcPanel title="Fila de prioridade" sub="Score de ação calculado com o modelo atual." style={{flex:'999 1 520px'}} gap={4}>{rows.length?rows.map((p,i)=><button key={p.id} type="button" className="vx-row" onClick={()=>go('prospect',{id:p.id})} style={{display:'grid',gridTemplateColumns:'32px 1fr 84px 70px',gap:10,padding:'12px 0'}}><span style={cxMono}>{i+1}</span><span style={{fontWeight:600,textAlign:'left'}}>{p.name}</span><ScoreChip v={sc(p)}/><span style={{fontSize:11,color:'var(--text-subtle)',alignSelf:'center'}}>{p.confidence}% conf.</span></button>):<span style={{color:'var(--text-muted)',fontSize:13}}>Nenhum prospect disponível.</span>}</CcPanel></div><CcPanel title="Como usar o score" sub="O score não substitui diagnóstico humano." gap={10}><div style={{display:'grid',gridTemplateColumns:'repeat(auto-fit,minmax(220px,1fr))',gap:12}}>{dims.map(([k,l,h])=><div key={k} style={{padding:14,border:'1px solid var(--border-subtle)',borderRadius:12}}><strong>{l}</strong><span style={{display:'block',fontSize:12,color:'var(--text-muted)',marginTop:5}}>{h}</span></div>)}</div></CcPanel></BlockGrid.Auto>};window.ScoringScreen=ScoringScreen;