import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Sponsor } from './entities/sponsor.entity';

@Injectable()
export class SponsorRepository {
  constructor(
    @InjectRepository(Sponsor)
    private readonly sponsorRepository: Repository<Sponsor>,
  ) {}

  async findAll(take: number, skip: number, search: string) {
    const query = this.sponsorRepository
      .createQueryBuilder('sponsor')
      .orderBy('sponsor.name', 'ASC')
      .skip(skip)
      .take(take);

    if (search) {
      query.where(
        'sponsor.name ILIKE :search OR sponsor.company_name ILIKE :search',
        { search: `%${search}%` },
      );
    }

    const [data, count] = await query.getManyAndCount();

    const result = data.map((course) => ({
      ...course,
      image: course.image ? `${process.env.DOMAIN}${course.image}` : null,
    }));

    const response = {
      count,
      result: result.map(({ ...rest }) => ({
        ...rest,
      })),
    };

    return response;
  }

  async findOne(id: string) {
    const data = await this.sponsorRepository.findOne({ where: { id } });

    const response = {
      ...data,
      image: data.image ? `${process.env.DOMAIN}${data.image}` : null,
    };

    return response;
  }

  //   async findJob(name: string, id?: string) {
  //     const normalizedName = name.toLowerCase();

  //     const query = this.jobRepository
  //       .createQueryBuilder('job')
  //       .where('LOWER(job.name) = :name', { name: normalizedName });

  //     if (id) {
  //       query.andWhere('job.id != :id', { id });
  //     }

  //     return query.getOne();
  //   }
}
