import {
  BadRequestException,
  Injectable,
  NotFoundException,
} from '@nestjs/common';
import { CreateFaqDto } from './dto/create-faq.dto';
import { UpdateFaqDto } from './dto/update-faq.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { FaqsRepository } from './faqs.repository';
import isValidUuidV4 from 'src/common/uuid validator/uuid-validate';
import { isEmpty } from 'src/common/helper';
import { Faq } from './entities/faq.entity';
import { lan } from 'src/lan';

@Injectable()
export class FaqsService {
  constructor(
    @InjectRepository(Faq)
    private readonly faqEntity: Repository<Faq>,
    private readonly faqRepository: FaqsRepository,
  ) {}
  async create(createFaqDto: CreateFaqDto) {
    const createFaq: CreateFaqDto = new Faq();
    Object.assign(createFaq, createFaqDto);
    const returnData = await this.faqEntity.save(createFaq);

    return returnData;
  }

  async findAll(page: number, limit: number, headers: any) {
    return await this.faqRepository.findAll(page, limit, headers);
  }

  async findOne(id: string) {
    if (!isValidUuidV4(id)) {
      throw new BadRequestException(lan('common.invalid_uuid_format'));
    }

    const faq = await this.faqRepository.findOne(id);

    if (isEmpty(faq)) {
      throw new NotFoundException(lan('common.data_not_found'));
    }

    return faq;
  }

  async update(id: string, updateFaqDto: UpdateFaqDto) {
    if (!isValidUuidV4(id)) {
      throw new BadRequestException(lan('common.invalid_uuid_format'));
    }

    const faqObj = await this.faqRepository.findOne(id);

    if (isEmpty(faqObj)) {
      throw new NotFoundException(lan('common.data_not_found'));
    }

    Object.assign(faqObj, updateFaqDto);

    return await this.faqEntity.update(id, faqObj);
  }

  async remove(id: string) {
    if (!isValidUuidV4(id)) {
      throw new BadRequestException(lan('common.invalid_uuid_format'));
    }

    const faq = await this.faqRepository.findOne(id);

    if (isEmpty(faq)) {
      throw new NotFoundException(lan('common.data_not_found'));
    }

    return await this.faqEntity.softDelete(id);
  }
}
