import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { News } from './entities/news.entity';
import { getCompleteUrl, isEmpty } from 'src/common/helper';

export class NewsRepository {
  constructor(
    @InjectRepository(News)
    private readonly newsRepository: Repository<News>,
  ) {}

  async findAll(take: number, skip: number, headers: any) {
    const [data, count]: any = await this.newsRepository.findAndCount({
      where:
        headers && headers['device-type'] === 'mobile' ? { status: 1 } : {},
      skip,
      take,
      order: { created_at: 'DESC' },
      relations: ['news_media', 'groups'],
    });

    if (data) {
      data.forEach((news) => {
        news.news_media.forEach((image) => {
          if (image.media_type === 'video') {
            image.thumbnail = getCompleteUrl(image.thumbnail);
          }

          image.media = getCompleteUrl(image.media);
        });

        news.groups.forEach((group) => {
          group.icon = getCompleteUrl(group.icon);
        });

        news.group_count = news.groups.length;
      });
    }

    const response = {
      count,
      data,
    };

    return response;
  }

  async findOne(id: string) {
    const data = await this.newsRepository.findOne({
      where: {
        id,
      },
      relations: ['news_media', 'groups'],
    });

    if (data && data.news_media) {
      data.news_media.forEach((image) => {
        if (image.media_type === 'video') {
          image.thumbnail = getCompleteUrl(image.thumbnail);
        }

        image.media = getCompleteUrl(image.media);
      });
    }

    if (data && data.groups) {
      data.groups.forEach((group) => {
        group.icon = getCompleteUrl(group.icon);
      });
    }

    return data;
  }

  async findOneById(id: string) {
    const data = await this.newsRepository.findOne({
      where: {
        id,
      },
      relations: ['news_media', 'groups'],
    });

    const response = {
      ...data,
    };

    return response;
  }
}
