import { BadRequestException, ConflictException, HttpException, Injectable, InternalServerErrorException, NotFoundException } from '@nestjs/common';
import { CreateAgenceDto } from './dto/create-agence.dto';
import { UpdateAgenceDto } from './dto/update-agence.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Agence } from './entities/agence.entity';
import { Repository } from 'typeorm';
import { Utilisateur } from 'src/gestion-utilisateurs/utilisateurs/entities/utilisateur.entity';

@Injectable()
export class AgenceService {

  constructor(
    @InjectRepository(Agence)
    private agenceRepository: Repository<Agence>,

    @InjectRepository(Utilisateur)
    private utilisateurRepository: Repository<Utilisateur>
  ) { }

  async create(createAgenceDto: CreateAgenceDto) {

    const existing = await this.agenceRepository.findOne({where: {codeagence: createAgenceDto.codeagence}});
    // 2. Si existe → retourner une erreur
    if (existing) {
      throw new ConflictException('Ce code agence existe déjà');
    }

    return await this.agenceRepository.save(createAgenceDto);


  }

  async findAll() {
    const agence = await this.agenceRepository.find();
    //return banques.map(({ id, ...data }) => data); // retire l'id
    return agence;
  }

  async findOne(id: number) {
      const checkBanque = await this.agenceRepository.findBy({id})
    }
  
    async update(id: number, updateBanqueDto: UpdateAgenceDto) {
      const checkBanque = await this.agenceRepository.preload({id, ...updateBanqueDto});
      if (!checkBanque) {
        throw new NotFoundException('Aucune valeur trouvée');
      }
      // const existing = await this.agenceRepository.findOne({where: {codeagence: updateBanqueDto.codeagence}});
      // // 2. Si existe → retourner une erreur
      // if (existing) {
      //   throw new ConflictException('Ce code agence existe déjà');
      // }
      
      return this.agenceRepository.save(checkBanque);
    }

  remove(id: number) {
    return `This action removes a #${id} agence`;
  }

}
