import { UuidGenerator } from "../helpers/uuid";
import { UID } from "../types/misc";
import { SpreadsheetChildEnv } from "../types/spreadsheet_env";
import { Registry } from "./registry";

//------------------------------------------------------------------------------
// Topbar Component Registry
//------------------------------------------------------------------------------
export interface TopbarComponent {
  id: UID;
  component: any;
  isVisible?: (env: SpreadsheetChildEnv) => boolean;
  sequence: number;
}

class TopBarComponentRegistry extends Registry<TopbarComponent> {
  mapping: { [key: string]: Function } = {};

  add(name: string, value: Omit<TopbarComponent, "id">) {
    const component: TopbarComponent = { ...value, id: UuidGenerator.uuidv4() };
    return super.add(name, component);
  }

  replace(name: string, value: Omit<TopbarComponent, "id">) {
    const component: TopbarComponent = { ...value, id: UuidGenerator.uuidv4() };
    return super.replace(name, component);
  }

  getAllOrdered(): TopbarComponent[] {
    return this.getAll().sort((a, b) => a.sequence - b.sequence);
  }
}

export const topbarComponentRegistry = new TopBarComponentRegistry();
