import { FleetTaxiYandexRepository } from "./fleet-taxi-yandex-repository";
import { IFleetApi } from "./interfaces/i-fleet-api";
import { Configuration } from "./models/configuration";
import { DriverProfile } from "./models/driver/driver-profile";
import { DriversListRequest, DriversListRequestFields } from "./models/driver/drivers-list-request";
import { DriversListResponse } from "./models/driver/drivers-list-response";
import { OrdersListRequestOptions } from "./models/orders/orders-list.request";
import { OrdersListResponse } from "./models/orders/orders-list.response";
import { AddTransactionQueryRequest } from "./models/transaction/add-transaction-query-request";
import { AddTransactionResponse } from "./models/transaction/add-transaction-query-response";
import { HttpClientFactory } from "./utils/http-client-factory";

export class Fleet implements IFleetApi {
  private repo: IFleetApi;
  constructor(config: Configuration){
    this.repo = new FleetTaxiYandexRepository(config, HttpClientFactory);
  }

  getAllDrivers(requestFields: DriversListRequestFields): Promise<Partial<DriverProfile>[]> {
    return this.repo.getAllDrivers(requestFields);
  }
  
  getOrders(options: OrdersListRequestOptions): Promise<OrdersListResponse> {
    return this.repo.getOrders(options);
  }

  postGetDriverProfilesList(requestBodyParams: DriversListRequest): Promise<DriversListResponse> {
    return this.repo.postGetDriverProfilesList(requestBodyParams);
  }

  postAddDriverProfilesTransactions(idempotencyToken: string, requestBodyParams: AddTransactionQueryRequest): Promise<AddTransactionResponse> {
    return this.repo.postAddDriverProfilesTransactions(idempotencyToken, requestBodyParams);
  }
}