// All database related API calls

import { SchemaFromBackend, SchemaStatsFromBackend } from '../../schema';
import { Broker } from './broker';

export function wsSchemaRequest(saveStateID: string) {
  Broker.instance().sendMessage({
    key: 'schema',
    subKey: 'get',
    body: {
      cached: false,
      saveStateID: saveStateID,
    },
  });
}

type SchemaResponse = (data: SchemaFromBackend) => void;
export function wsSchemaSubscription(callback: SchemaResponse) {
  const id = Broker.instance().subscribe(callback, 'schema_result');
  return () => {
    Broker.instance().unSubscribe('schema_result', id);
  };
}

export function wsSchemaStatsRequest(saveStateID: string) {
  Broker.instance().sendMessage({
    key: 'schema',
    subKey: 'getSchemaStats',
    body: {
      cached: false,
      saveStateID: saveStateID,
    },
  });
}

type SchemaStatsResponse = (data: SchemaStatsFromBackend) => void;
export function wsSchemaStatsSubscription(callback: SchemaStatsResponse) {
  const id = Broker.instance().subscribe(callback, 'schema_stats_result');
  return () => {
    Broker.instance().unSubscribe('schema_stats_result', id);
  };
}