package io.gmss.fiscad.implementations.rfu.parametre;

import io.gmss.fiscad.entities.rfu.parametre.CategorieBatiment;
import io.gmss.fiscad.exceptions.BadRequestException;
import io.gmss.fiscad.exceptions.NotFoundException;
import io.gmss.fiscad.interfaces.rfu.parametre.CategorieBatimentService;
import io.gmss.fiscad.repositories.rfu.parametre.CategorieBatimentRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class CategorieBatimentServiceImpl implements CategorieBatimentService {
    private final CategorieBatimentRepository campagneRepositoryRepository;

    public CategorieBatimentServiceImpl(CategorieBatimentRepository campagneRepositoryRepository) {
        this.campagneRepositoryRepository = campagneRepositoryRepository;
    }

    @Override
    public CategorieBatiment createCategorieBatiment(CategorieBatiment campagneRepository) throws BadRequestException {
        if (campagneRepository.getId() != null) {
            throw new BadRequestException("Impossible de créer une nouvelle campgne ayant un id non null.");
        }
        return campagneRepositoryRepository.save(campagneRepository);
    }
    @Override
    public CategorieBatiment updateCategorieBatiment(Long id, CategorieBatiment campagneRepository) throws NotFoundException {
        if (campagneRepository.getId() == null) {
            throw new BadRequestException("Impossible de mettre à jour une nouvelle campagneRepository ayant un id null.");
        }
        if (!campagneRepositoryRepository.existsById(campagneRepository.getId())) {
            throw new NotFoundException("Impossible de trouver la campagneRepository spécifiée dans notre base de données.");
        }
        return campagneRepositoryRepository.save(campagneRepository);
    }

    @Override
    public void deleteCategorieBatiment(Long id) throws NotFoundException {
        Optional<CategorieBatiment> campagneRepositoryOptional = campagneRepositoryRepository.findById(id);
        if (campagneRepositoryOptional.isPresent()) {
            campagneRepositoryRepository.deleteById(campagneRepositoryOptional.get().getId());
        } else {
            throw new NotFoundException("Impossible de trouver la campagneRepository spécifiée dans notre base de données.");
        }
    }
    @Override
    public Page<CategorieBatiment> getCategorieBatimentList(Pageable pageable) {
        return campagneRepositoryRepository.findAll(pageable);
    }

    @Override
    public List<CategorieBatiment> getCategorieBatimentList() {
        return campagneRepositoryRepository.findAll();
    }


    @Override
    public Optional<CategorieBatiment> getCategorieBatimentById(Long id) {
        return campagneRepositoryRepository.findById(id);
    }
}

