import { RoutingKeyParams } from '../Actions/Interfaces/RoutingKeyParams';

export interface ModelInterface {
  actionGetMetadata(microserviceName: string, actionName: string, connectionType: string): any;

  actionGetItem(
    microserviceName: string,
    connectionType: string,
    id: string,
    filter?: (string | object)[] | undefined,
    orders?: object[]
  ): any;

  actionGetItems(
    microserviceName: string,
    connectionType: string,
    perPage?: number,
    page?: number,
    filter?: (string | object)[] | undefined,
    withs?: string | string[] | undefined,
    orders?: object[],
    actionName?: string
  ): any;

  actionCreate(
    microserviceName: string,
    connectionType: string,
    actionParams?: any,
    channelParameters?: RoutingKeyParams | undefined
  ): any;

  actionUpdate(microserviceName: string, connectionType: string, actionParams?: any): any;

  actionDelete(microserviceName: string, connectionType: string, actionParams?: any): any;

  actionCreateMany(
    microserviceName: string,
    connectionType: string,
    actionParams?: any,
    channelParameters?: RoutingKeyParams | undefined
  ): any;

  actionUpdateMany(microserviceName: string, connectionType: string, actionParams?: any): any;

  actionDeleteMany(microserviceName: string, connectionType: string, actionParams?: any): any;

  actionCustom(
    microserviceName: string,
    actionName: string,
    connectionType: string,
    actionParams?: object,
    additionalParams?: any
  ): any;

  getModelMetadata(): any;

  getModelActionList(): any;

  getModelValidationRules(): any;

  getModelActionsMetaData(): any;

  getModelDataBaseFields(): any;

  getModelFieldsWithTypes(): any;

  actionUpdateManyWithFilter(
    microserviceName: string,
    connectionType: string,
    actionParams: object
  ): any;

  actionDeleteManyWithFilter(
    microserviceName: string,
    connectionType: string,
    actionParams: object
  ): any;

  // getSpecificFields(
  //   fields: string[],
  //   filterType: string,
  //   dataToFilter: string | object | object[]
  // ): void;

  setBaseUrl(URL: string, connectionType: string): any;
}
