import { Injectable } from '@angular/core';
import { Filter } from '@shared/components/filter';
import {
  AutocompleteTokenDTO,
  ListResponseArgsOfDBHOrderItemListItemDTO,
  QueryTokenDTO,
  ResponseArgsOfIEnumerableOfAutocompleteDTO,
  ResponseArgsOfQuerySettingsDTO,
} from '@generated/swagger/oms-api';
import { Observable } from 'rxjs';

@Injectable()
export abstract class PickupShelfIOService {
  abstract name(): string;

  abstract getQuerySettings(): Observable<ResponseArgsOfQuerySettingsDTO>;

  abstract search(queryToken: QueryTokenDTO): Observable<ListResponseArgsOfDBHOrderItemListItemDTO>;

  abstract complete(autocompleteToken: AutocompleteTokenDTO): Observable<ResponseArgsOfIEnumerableOfAutocompleteDTO>;

  abstract getOrderItemsByOrderNumberOrCompartmentCode(args: {
    orderNumber?: string;
    compartmentCode?: string;
    filter?: Filter;
  }): Observable<ListResponseArgsOfDBHOrderItemListItemDTO>;

  abstract getOrderItemsByCustomerNumber(args: {
    customerNumber: string;
  }): Observable<ListResponseArgsOfDBHOrderItemListItemDTO>;
}
