import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ErrorService } from '../../error/error.service';
import {
  applyFiltersToBuilder,
  applySortingToBuilder,
  paginationResult,
} from '../../utils';
import { Repository } from 'typeorm';
import { PictureEntity } from './entities/picture.entity';

@Injectable()
export class PictureSerrvice {
  constructor(
    @InjectRepository(PictureEntity)
    private pictureRepository: Repository<PictureEntity>,

    private error: ErrorService,
  ) {}

  /**
   * -------------------------------------------------------
   */
  async getAll(page = 1, limit = 20, filters = null, sorts = null) {
    let builder = this.pictureRepository.createQueryBuilder('picture');
    builder.leftJoinAndSelect('picture.productMappings', 'productMappings');
    builder.leftJoinAndSelect('picture.color', 'color');

    builder.take(limit);
    builder.skip((page - 1) * limit);

    if (sorts) {
      builder = applySortingToBuilder(builder, sorts);
    } else {
      builder.orderBy(`${builder.alias}.createdAt`, 'DESC');
    }

    builder = applyFiltersToBuilder(builder, filters);
    const [items, totalItems] = await builder.getManyAndCount();
    return {
      items: items,
      pagination: paginationResult(page, limit, totalItems),
    };
  }
}
