type Listener=()=>void;

const pendingByWorkspace=new Map<string,boolean>();
const listeners=new Set<Listener>();

function emit(){for(const listener of listeners)listener();}

export const interactiveDocSaveStatus={
  hasPendingOrFailedSave:()=>[...pendingByWorkspace.values()].some(Boolean),
  subscribeToSaveStatus:(listener:Listener)=>{listeners.add(listener);return()=>listeners.delete(listener);},
  setWorkspacePending:(wsName:string,pending:boolean)=>{
    const previous=pendingByWorkspace.get(wsName)||false;
    if(pending)pendingByWorkspace.set(wsName,true);else pendingByWorkspace.delete(wsName);
    if(previous!==pending)emit();
  },
  clearWorkspace:(wsName:string)=>{
    if(pendingByWorkspace.delete(wsName))emit();
  },
};
