const OMS_ROLES = [
  {id:'admin',name:'Administrator OMS',initials:'AD',unit:'Pusdatin KKP',description:'Konfigurasi platform, seluruh aplikasi, dan persetujuan.',screens:['*'],tools:['*'],canApprove:true,readOnly:false,color:'#eec04f'},
  {id:'analyst',name:'Analis Kelautan',initials:'AK',unit:'Tim Analitik KKP',description:'Analisis lintas-data, geospasial, EVIKA, dan blue carbon.',screens:['assistant','search','apps','digitaltwin','realtime','gis','evika','bluecarbon','dataset','approval','delivered'],tools:['province-statistics','evika-area-value','conservation-wfs','conservation-wms','bluecarbon-analyze','bluecarbon-job','ecosystem-wms','webmap-oms-mangrove','webmap-oms-conservation'],canApprove:false,readOnly:false,color:'#59bde8'},
  {id:'operator',name:'Operator Monitoring',initials:'OM',unit:'Command Center PSDKP',description:'Pemantauan kapal, GeoEvent, alert, pelabuhan, dan eskalasi.',screens:['assistant','apps','realtime','gis','dataset','approval','delivered'],tools:['geoevent-simulator','conservation-wfs'],canApprove:false,readOnly:false,color:'#ff9f43'},
  {id:'conservation',name:'Pengelola Konservasi',initials:'PK',unit:'Dit. Konservasi Ekosistem',description:'EVIKA, kawasan konservasi, ekosistem, dan blue carbon.',screens:['assistant','search','apps','digitaltwin','realtime','gis','evika','bluecarbon','dataset','approval','delivered'],tools:['evika-area-value','conservation-wfs','conservation-wms','bluecarbon-analyze','bluecarbon-job','ecosystem-wms','webmap-oms-mangrove','webmap-oms-conservation'],canApprove:false,readOnly:false,color:'#65c98b'},
  {id:'executive',name:'Pimpinan / Eksekutif',initials:'PE',unit:'Pimpinan KKP',description:'Ringkasan nasional dan situasi strategis dalam mode baca.',screens:['assistant','search','apps','digitaltwin','realtime','gis','evika','bluecarbon','dataset','approval','delivered'],tools:['province-statistics','evika-area-value','conservation-wms','ecosystem-wms'],canApprove:true,readOnly:true,color:'#a78bfa'}
];
function getOmsRole(id){return OMS_ROLES.find(r=>r.id===id)||OMS_ROLES[1];}
function canRoleAccess(roleOrId,screen){const r=typeof roleOrId==='string'?getOmsRole(roleOrId):roleOrId;return screen==='landing'||r.screens.includes('*')||r.screens.includes(screen);}
function canRoleUseTool(roleOrId,toolId){const r=typeof roleOrId==='string'?getOmsRole(roleOrId):roleOrId;return r.tools.includes('*')||r.tools.includes(toolId);}
function RoleAccessDenied({role,target,go}){return <div style={{minHeight:'calc(100vh - 60px)',display:'grid',placeItems:'center',padding:24,background:'var(--surface-page)'}}><div style={{maxWidth:520,textAlign:'center',padding:28,border:'1px solid var(--border-subtle)',borderRadius:'var(--radius-lg)',background:'#fff',boxShadow:'var(--shadow-md)'}}><div style={{width:46,height:46,borderRadius:'50%',display:'grid',placeItems:'center',margin:'0 auto 14px',background:'var(--status-warning-soft)',color:'var(--status-warning)',fontWeight:800}}>§</div><h2 style={{margin:'0 0 8px'}}>Akses dibatasi oleh peran</h2><p style={{color:'var(--text-muted)',lineHeight:1.6}}>Peran <b>{role.name}</b> tidak memiliki hak membuka <b>{target}</b>. Pilih aplikasi lain atau minta Administrator OMS memperbarui akses.</p><button onClick={()=>go('apps')} style={{border:0,borderRadius:'var(--radius-pill)',background:'var(--kkp-indigo-700)',color:'#fff',padding:'9px 16px',fontWeight:700,cursor:'pointer'}}>Kembali ke katalog aplikasi</button></div></div>}
Object.assign(window,{OMS_ROLES,getOmsRole,canRoleAccess,canRoleUseTool,RoleAccessDenied});
