/// store/store_rsv.mbt —— 作用域预订(拿来主义:Interlinked 文件预订 → 多 agent 并发编辑冲突预防)
///
/// 让多个 AI 客户端(并发 agent)在同一命名空间/工作区协作时,可对文件/目录/资源"作用域"
/// 做轻量预订:预订在 TTL 内独占,其他 agent `reserve_check` 会被告知持有者,避免同时改同一文件。
/// 双后端(内存 + SQLite)一致,供 server 工具调用。

///|
/// 内存后端:写入/覆盖某作用域预订。(返回值约定:Ok(msg),不使用)
pub fn MemoryStore::rsv_set(
  self : MemoryStore,
  scope~ : String,
  agent~ : String,
  ttl_until~ : String,
  created_at~ : String,
) -> Result[String, String] {
  self.reservations.set(scope, (agent, ttl_until, created_at))
  Ok("reserved")
}

///|
/// 内存后端:查询某作用域预订(未预订返回 None)。
pub fn MemoryStore::rsv_get(
  self : MemoryStore,
  scope : String,
) -> (String, String, String)? {
  self.reservations.get(scope)
}

///|
/// 内存后端:释放预订(仅持有者可释放;不存在或非持有者返回 false)。
pub fn MemoryStore::rsv_release(
  self : MemoryStore,
  scope : String,
  agent : String,
) -> Bool {
  match self.reservations.get(scope) {
    Some((a, _, _)) if a == agent => {
      self.reservations.remove(scope)
      true
    }
    _ => false
  }
}

///|
/// 内存后端:列出全部预订(升序,无指定顺序保证)。
pub fn MemoryStore::rsv_list(
  self : MemoryStore,
) -> Array[(String, String, String)] {
  let out : Array[(String, String, String)] = []
  for (_, v) in self.reservations {
    out.push(v)
  }
  out
}

// —— 执行者能力注册(Marketplace 雏形跨进程持久化,R31)——

///|
/// 内存后端:写入/覆盖一个执行者的能力注册(幂等)。
pub fn MemoryStore::executor_save(
  self : MemoryStore,
  name~ : String,
  abilities_json~ : String,
  created_at~ : String,
) -> Result[String, String] {
  self.executors.set(name, (abilities_json, created_at))
  Ok("saved")
}

///|
/// 内存后端:列出全部执行者 (name, abilities_json, created_at)。
pub fn MemoryStore::executor_list(
  self : MemoryStore,
) -> Array[(String, String, String)] {
  let out : Array[(String, String, String)] = []
  for (k, v) in self.executors {
    out.push((k, v.0, v.1))
  }
  out
}

///|
/// 内存后端:清空全部执行者能力注册(Marketplace 重置/整洁)。
pub fn MemoryStore::executor_clear(self : MemoryStore) -> Bool {
  self.executors.clear()
  true
}