/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */


import { reverseRecord } from '../type.utils.js';

export const COMMAND_CODE = {
  Ping: 1,
  GetStats: 10,
  GetSnapshot: 11,                    // @TODO GET_SNAPSHOT_FILE_CODE: u32 = 11
  GetClusterMetadata: 12,             // GET_CLUSTER_METADATA_CODE: u32 = 12
  GetMe: 20,
  GetClient: 21,
  GetClients: 22,
  GetUser: 31,
  GetUsers: 32,
  CreateUser: 33,
  DeleteUser: 34,
  UpdateUser: 35,
  UpdatePermissions: 36,
  ChangePassword: 37,
  LoginUser: 38,
  LogoutUser: 39,
  GetAccessTokens: 41,
  CreateAccessToken: 42,
  DeleteAccessToken: 43,
  LoginWithAccessToken: 44,
  PollMessages: 100,
  SendMessages: 101,
  FlushUnsavedBuffers: 102,
  GetOffset: 120,
  StoreOffset: 121,
  DeleteConsumerOffset: 122,
  GetStream: 200,
  GetStreams: 201,
  CreateStream: 202,
  DeleteStream: 203,
  UpdateStream: 204,
  PurgeStream: 205,
  GetTopic: 300,
  GetTopics: 301,
  CreateTopic: 302,
  DeleteTopic: 303,
  UpdateTopic: 304,
  PurgeTopic: 305,
  CreatePartitions: 402,
  DeletePartitions: 403,
  DeleteSegments: 503,
  GetGroup: 600,
  GetGroups: 601,
  CreateGroup: 602,
  DeleteGroup: 603,
  JoinGroup: 604,
  LeaveGroup: 605,
};

const reverseCommandCodeMap = reverseRecord(COMMAND_CODE);

export const translateCommandCode = (code: number): string => {
  return reverseCommandCodeMap[code] || `unknown_command_code_${code}`
};
