import { BodyDoors } from './body-doors';

/**
 * ## StockCar
 * Модель автомобиля в контексте склада.
 */
export interface StockCar {
  /**
   * ## Identificator
   * Уникальный идентификатор объекта
   */
  id?: number | string;

  /**
   * ## dealerId
   * Уникальный идентификатор объекта
   */
  dealerId?: number | string;

  /**
   * ## Brand
   * Наименование производителя
   */
  brand?: number;

  /**
   * ## Model
   * Модель
   */
  model?: number;

  /**
   * ## VIN
   * Идентификационный номер ТС
   */
  vin?: string;

  /**
   * ## CreationYear
   * Год производства авто
   */
  creationYear?: number;

  /**
   * ## Generation
   * Поколение
   */
  generationType?: number;

  /**
   * ## BodyDoors
   * Комплексное свойство содержащее в себе объединение двух типов свойств — Doors и
   * BodyType
   */
  bodyDoors?: BodyDoors;

  /**
   * ## WheelType
   * Левый/Правый руль
   */
  wheelType?: number;

  /**
   * ## GearType
   * Тип коробки передач
   */
  gearType?: number;

  /**
   * ## DriveType
   * Тип привода
   */
  driveType?: number;

  /**
   * ## EngineType
   * Тип двигателя
   */
  engineType?: number;

  /**
   * ## EngineVolume
   * Объем двигателя автомобиля в литрах
   */
  engineVolume?: number;

  /**
   * ## EnginePower
   * Мощность двигателя автомобиля в лошадиных силах
   */
  enginePower?: number;

  /**
   * ## Mileage
   * Пробег ТС в километрах
   */
  mileage?: number;

  /**
   * ## Color
   * Цвет ТС
   */
  color?: number;

  /**
   * ## VehicleType
   * Тип транспортного средства
   */
  vehicleType?: number;

  /**
   * ## Photos
   * Массив фотографий
   */
  photos?: Array<string>;

  /**
   * ## stockExternalSource
   * Источник стокового авто:
   */
  stockExternalSource?: 'offer' | 'dms' | 'cme';

  /**
   * ## stockExternalId
   * Внешний идентификатор стокового автомобиля
   */
  stockExternalId?: string;

  /**
   * ## objectVersion
   * Версия объекта, обычно получается вместе с объектом из API, отправляется при
   * сохранении в неизменном виде. В случае, если за время между получением и
   * отправкой объекта на сохранения состояние объекта в API изменилось, то API
   * вернет 409 Conflict, в этом случае пользователю нужно сообщить, что объект уже
   * был изменен, поэтому требуется подтверждение сохранения (в этом случае нужно
   * испольщзовать параметр `forceSave`)
   */
  objectVersion?: number;
}
