import { Plug } from "@plugos/plugos/plug";
import { FileMeta } from "../types";

export type FileEncoding = "string" | "arraybuffer" | "dataurl";
export type FileData = ArrayBuffer | string;
export interface SpacePrimitives {
  // Pages
  fetchFileList(): Promise<FileMeta[]>;
  readFile(
    name: string,
    encoding: FileEncoding
  ): Promise<{ data: FileData; meta: FileMeta }>;
  getFileMeta(name: string): Promise<FileMeta>;
  writeFile(
    name: string,
    encoding: FileEncoding,
    data: FileData,
    selfUpdate?: boolean
  ): Promise<FileMeta>;
  deleteFile(name: string): Promise<void>;

  // Plugs
  proxySyscall(plug: Plug<any>, name: string, args: any[]): Promise<any>;
  invokeFunction(
    plug: Plug<any>,
    env: string,
    name: string,
    args: any[]
  ): Promise<any>;
}