import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ErrorService } from '../../error/error.service';
import { Repository } from 'typeorm';
import { KilometerRangeEntity } from './entities/kilometer-range.entity';
import { CreateKilometerRangeDto } from './dto/create-kilometer-range.dto';
import { UpdateKilometerRangeDto } from './dto/update-kilometer-range.dto';

@Injectable()
export class KilometerRangeService {
  constructor(
    @InjectRepository(KilometerRangeEntity)
    private kilometerRangeRepository: Repository<KilometerRangeEntity>,
    private error: ErrorService,
  ) {}

  /**
   * -------------------------------------------------------
   */
  async getAll() {
    return await this.kilometerRangeRepository.find();
  }

  /**
   * -------------------------------------------------------
   */
  async getById(id: number) {
    return await this.kilometerRangeRepository.findOne(id);
  }

  /**
   * -------------------------------------------------------
   */
  async create(dto: CreateKilometerRangeDto) {
    const { identifiers } = await this.kilometerRangeRepository
      .createQueryBuilder()
      .insert()
      .values(dto)
      .execute();

    const newId = identifiers[0].id;
    return await this.getById(newId);
  }

  /**
   * -------------------------------------------------------
   */
  async update(id: number, dto: UpdateKilometerRangeDto) {
    return await this.kilometerRangeRepository
      .createQueryBuilder()
      .update()
      .set(dto)
      .where({ id })
      .execute();
  }

  /**
   * -------------------------------------------------------
   */
  async deleteKilometerRange(id: number) {
    return await this.kilometerRangeRepository.delete(id);
  }
}
