const { Button, Input, Select, Icon, Badge } = window.KKPMarineDigitalDesignSystem_4fef83;

const ENTERPRISE_STORE_KEY = 'oms-enterprise-workspaces-v1';
const ENTERPRISE_CONFIG_FALLBACK = {
  portalUrl:'https://portal.kkp.go.id/portal', mode:'prototype', folderRoot:'OMS GeoAI',
  users:{admin:{username:'admin.oms'},analyst:{username:'analis.kelautan'},operator:{username:'operator.monitoring'},conservation:{username:'pengelola.konservasi'},executive:{username:'pimpinan.kkp'}},
};

function enterpriseId(prefix){
  const raw = (crypto && crypto.randomUUID ? crypto.randomUUID() : Date.now().toString(16)+Math.random().toString(16).slice(2)).replace(/-/g,'');
  return prefix+raw.slice(0,16);
}
function readEnterpriseStore(){try{return JSON.parse(localStorage.getItem(ENTERPRISE_STORE_KEY)||'{}');}catch(_){return {};}}
function writeEnterpriseStore(value){localStorage.setItem(ENTERPRISE_STORE_KEY,JSON.stringify(value));window.dispatchEvent(new CustomEvent('oms-enterprise-change'));}
async function loadEnterpriseConfig(){try{const r=await fetch('/ui_kits/oms/arcgis-enterprise.seed.json');if(r.ok)return await r.json();}catch(_){}return ENTERPRISE_CONFIG_FALLBACK;}
function enterpriseUsername(config,role){return config?.users?.[role?.id]?.username||('user.'+(role?.id||'analyst'));}
function listEnterpriseRuns(username){const store=readEnterpriseStore();return (store[username]?.runs||[]).slice().sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt));}
function saveEnterpriseAnalysis({config,role,title,status,sharing,tags,message,focus}){
  if(role?.readOnly) throw new Error('Peran baca tidak dapat membuat atau mengubah Feature Layer.');
  const username=enterpriseUsername(config,role),store=readEnterpriseStore(),now=new Date().toISOString();
  const workspace=store[username]||{
    owner:username,folder:(config.folderRoot||'OMS GeoAI')+'/'+new Date().getFullYear(),
    featureServiceItemId:enterpriseId('fs'),featureServiceUrl:(config.portalUrl||'')+'/rest/services/Hosted/OMS_GeoAI_Workspace_'+username.replace(/\W/g,'_')+'/FeatureServer',runs:[],audit:[]
  };
  const runId='GEOAI-'+new Date().getFullYear()+'-'+String(workspace.runs.length+1).padStart(5,'0');
  const itemId=enterpriseId('wm');
  const geometry=focus?.polygon?{type:'polygon',rings:[focus.polygon]}:focus?.extent?{type:'extent',...focus.extent}:focus?.lat?{type:'point',longitude:focus.lon,latitude:focus.lat}:null;
  const run={runId,itemId,title,owner:username,status,sharing,tags:tags.split(',').map(x=>x.trim()).filter(Boolean),createdAt:now,updatedAt:now,
    analysisType:focus?.polygon?'blue-carbon':focus?.wmsLayer?'spatial-statistic':'agentic-analysis',sourceApp:'assistant',simulation:config.mode!=='live',
    confidence:focus?0.87:0.72,summary:String(message?.text||'').replace(/\*\*/g,'').slice(0,320),geometry,featureCount:geometry?1:0,
    portalItemUrl:(config.portalUrl||'')+'/home/item.html?id='+itemId};
  workspace.runs.unshift(run);
  workspace.audit.unshift({id:enterpriseId('audit'),runId,action:'applyEdits',layer:'analysis_features',actor:username,timestamp:now,status:'success'});
  workspace.audit.unshift({id:enterpriseId('audit'),runId,action:'addItem',layer:'web-map',actor:username,timestamp:now,status:'success'});
  store[username]=workspace;writeEnterpriseStore(store);return {...run,workspace};
}

function EnterpriseSaveDialog({open,onClose,onSaved,role,message,focus}){
  const [config,setConfig]=React.useState(ENTERPRISE_CONFIG_FALLBACK);
  const [title,setTitle]=React.useState('Analisis GeoAI OMS');
  const [status,setStatus]=React.useState('draft');
  const [sharing,setSharing]=React.useState('private');
  const [tags,setTags]=React.useState('OMS, GeoAI, KKP');
  const [saving,setSaving]=React.useState(false);
  const [error,setError]=React.useState('');
  React.useEffect(()=>{loadEnterpriseConfig().then(setConfig);},[]);
  React.useEffect(()=>{if(open){setTitle((focus?.label||message?.knowledgePlan?.playbook?.name||'Analisis GeoAI OMS')+' — '+new Date().toLocaleDateString('id-ID'));setError('');}},[open,message,focus]);
  if(!open)return null;
  const username=enterpriseUsername(config,role);
  const submit=()=>{setSaving(true);setError('');setTimeout(()=>{try{const saved=saveEnterpriseAnalysis({config,role,title,status,sharing,tags,message,focus});setSaving(false);onSaved(saved);}catch(e){setSaving(false);setError(e.message);}},650);};
  return <div className="kkp-modal__scrim" onClick={onClose} style={{zIndex:900}}><div className="kkp-modal" role="dialog" aria-modal="true" style={{maxWidth:620}} onClick={e=>e.stopPropagation()}>
    <div className="kkp-modal__head"><div><h3 style={{margin:0}}>Simpan di Workspace</h3><p style={{margin:'4px 0 0',fontSize:12,color:'var(--text-muted)'}}>Simpan hasil, konteks peta, dan riwayat analisis untuk sesi Anda.</p></div><button onClick={onClose} aria-label="Tutup" style={{border:0,background:'transparent',cursor:'pointer'}}><Icon name="x" size={16}/></button></div>
    <div className="kkp-modal__body">
      <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:12,padding:12,borderRadius:'var(--radius-md)',background:'var(--surface-accent-soft)',marginBottom:16,fontSize:12}}>
        <div><span style={{color:'var(--text-muted)'}}>Workspace</span><b style={{display:'block'}}>{config.folderRoot}/{new Date().getFullYear()}</b></div><div><span style={{color:'var(--text-muted)'}}>Pengguna</span><b style={{display:'block'}}>{username}</b></div>
        <div><span style={{color:'var(--text-muted)'}}>Konten</span><b style={{display:'block'}}>Peta, data, dan analisis</b></div><div><Badge tone="warning">Workspace prototype</Badge></div>
      </div>
      <Input label="Judul analisis" value={title} onChange={e=>setTitle(e.target.value)} />
      <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:12,marginTop:12}}><Select label="Status workflow" value={status} onChange={e=>setStatus(e.target.value)} options={[{value:'draft',label:'Draft'},{value:'submitted',label:'Submit untuk review'}]}/><Select label="Visibilitas" value={sharing} onChange={e=>setSharing(e.target.value)} options={[{value:'private',label:'Private — hanya saya'},{value:'group',label:'Grup kerja'},{value:'organization',label:'Organisasi KKP'}]}/></div>
      <div style={{marginTop:12}}><Input label="Tags" value={tags} onChange={e=>setTags(e.target.value)} hint="Pisahkan dengan koma" /></div>
      <div style={{marginTop:14,padding:12,border:'1px solid var(--border-subtle)',borderRadius:'var(--radius-sm)',fontSize:12,color:'var(--text-muted)'}}>Yang disimpan: konteks percakapan, layer peta, area analisis, ringkasan hasil, dan riwayat perubahan di workspace Anda.</div>
      {error?<div style={{marginTop:12,color:'var(--status-critical)',fontSize:12}}>{error}</div>:null}
    </div>
    <div className="kkp-modal__foot"><Button variant="secondary" onClick={onClose}>Batal</Button><Button variant="primary" iconStart="save" disabled={saving||!title.trim()||role?.readOnly} onClick={submit}>{saving?'Menyimpan…':'Simpan di Workspace'}</Button></div>
  </div></div>;
}

function EnterpriseWorkspacePanel({role,onClose,embedded=false,onSaveWorkspace,message,focus}){
  const [config,setConfig]=React.useState(ENTERPRISE_CONFIG_FALLBACK),[tick,setTick]=React.useState(0);
  React.useEffect(()=>{loadEnterpriseConfig().then(setConfig);const fn=()=>setTick(x=>x+1);window.addEventListener('oms-enterprise-change',fn);return()=>window.removeEventListener('oms-enterprise-change',fn);},[]);
  const username=enterpriseUsername(config,role),runs=listEnterpriseRuns(username);
  return <div style={{position:embedded?'static':'absolute',inset:embedded?undefined:'12px 12px auto auto',width:embedded?'100%':360,maxHeight:embedded?'none':'calc(100% - 24px)',overflow:'auto',zIndex:20,background:'rgba(255,255,255,.78)',backdropFilter:'blur(16px) saturate(160%)',WebkitBackdropFilter:'blur(16px) saturate(160%)',border:'1px solid var(--border-subtle)',borderRadius:'var(--radius-lg)',boxShadow:'var(--shadow-panel)'}}>
    <div style={{padding:14,borderBottom:'1px solid var(--border-subtle)',display:'flex',alignItems:'center',gap:10}}><Icon name="portal" size={18}/><div style={{flex:1}}><b style={{display:'block',fontSize:13}}>Workspace saya</b><small style={{color:'var(--text-muted)'}}>{username} · {runs.length} analisis</small></div><button onClick={onClose} aria-label="Tutup" style={{border:0,background:'transparent',cursor:'pointer'}}><Icon name="x" size={14}/></button></div>
    <div style={{padding:12}}>{onSaveWorkspace ? <div style={{padding:10,marginBottom:12,borderRadius:'var(--radius-sm)',background:'rgba(224,242,254,.5)',border:'1px solid rgba(56,132,255,.24)'}}><div style={{fontSize:10.5,fontWeight:700,color:'var(--text-heading)',marginBottom:7}}>Sesi aktif</div><div style={{fontSize:10,color:'var(--text-muted)',marginBottom:9}}>{message?'Hasil analisis terakhir siap disimpan bersama konteks peta dan percakapan.':'Belum ada hasil analisis pada sesi ini.'}</div><Button size="s" variant="primary" iconStart="save" disabled={!message||role?.readOnly} onClick={onSaveWorkspace}>Simpan workspace</Button></div>:null}{runs.length?runs.map(r=><div key={r.runId} style={{padding:'11px 0',borderBottom:'1px solid var(--border-subtle)'}}><div style={{display:'flex',gap:8,alignItems:'center'}}><b style={{fontSize:11.5,flex:1}}>{r.title}</b><Badge tone={r.status==='submitted'?'warning':'neutral'}>{r.status}</Badge></div><div className="kkp-mono" style={{fontSize:9.5,color:'var(--text-muted)',marginTop:5}}>{r.runId} · {r.itemId}</div><div style={{display:'flex',gap:7,marginTop:8}}><Button size="s" variant="ghost" iconStart="map" onClick={()=>alert('Prototype handoff\nitemId: '+r.itemId+'\nrunId: '+r.runId+'\nowner: '+r.owner)}>Buka Map Viewer</Button><span style={{fontSize:9,color:'var(--text-muted)',alignSelf:'center'}}>{r.sharing}</span></div></div>):<div style={{padding:24,textAlign:'center',color:'var(--text-muted)',fontSize:12}}>Belum ada hasil tersimpan untuk pengguna ini.</div>}</div>
  </div>;
}

Object.assign(window,{EnterpriseSaveDialog,EnterpriseWorkspacePanel,loadEnterpriseConfig,saveEnterpriseAnalysis,listEnterpriseRuns,enterpriseUsername});
