import type { KbxMenuSearchResult, KbxNavigationResolvedEntry } from '@kbx/contracts'
function normalize(value:string){return value.toLocaleLowerCase().replace(/\s+/g,'')}
export function searchNavigationEntries(entries:KbxNavigationResolvedEntry[], query:string, limit=12, priorityScreenIds:string[]=[]):KbxMenuSearchResult[]{
  const q=normalize(query);const priority=new Map(priorityScreenIds.map((id,index)=>[id,index]))
  return entries.map(entry=>{
    const values=[entry.title,entry.screenId,entry.module,entry.section,...(entry.keywords??[])].map(normalize)
    let score=q?0:(priority.has(entry.screenId)?1000-(priority.get(entry.screenId)??0):1)
    for(const value of values){if(!q)continue;if(value===q)score=Math.max(score,100);else if(value.startsWith(q))score=Math.max(score,70);else if(value.includes(q))score=Math.max(score,40)}
    if(q&&priority.has(entry.screenId)&&score>0)score+=5
    return {screenId:entry.screenId,title:entry.title,module:entry.module,section:entry.section,path:entry.path,keywords:entry.keywords??[],score}
  }).filter(x=>x.score>0).sort((a,b)=>b.score-a.score||a.title.localeCompare(b.title)).slice(0,limit)
}
