package com.app.ServicesImpl;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import javax.management.AttributeNotFoundException;
import javax.persistence.EntityNotFoundException;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import com.app.Dto.ConjointDto;
import com.app.Entity.Conjoint;
import com.app.Repository.ConjointRepository;
import com.app.Services.ConjointService;
import com.app.Validations.ObjectsValidator;

import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class ConjointImpl implements ConjointService{
	private final ConjointRepository conjRepository;

    private final   ObjectsValidator<ConjointDto> objectsValidator;

	@Override
	public void delete(Long id) {
		Conjoint employee = conjRepository.findById(id).orElseThrow(()->new EntityNotFoundException(id+" not found"));
		conjRepository.deleteById(id);
	}

	@Override
	public ConjointDto findById(Long id) {
		 return conjRepository.findById(id).map(ConjointDto::FromEntity)
	        		//map:
	                .orElseThrow(() -> new EntityNotFoundException("No CONJOINT  was found with the provided ID"));

	}

	@Override
	public List<ConjointDto> findAllConjoints() {
		return conjRepository.findAll()
                .stream() // parcour la liste
                .map(ConjointDto::FromEntity) // convertion liste
                .collect(Collectors.toList()); // retour liste
	}

	@Override
	public ConjointDto save(ConjointDto dto) {
		Conjoint conjoint;
		System.out.println("Conjoint dans conjoint ID " + dto.getId());
		if (dto.getId() > 0) {
            // Mise à jour
			conjoint = conjRepository.findById(dto.getId())
                    .orElseThrow();
            // Copie des propriétés à mettre à jour
            BeanUtils.copyProperties(dto, conjoint, "id"); // Ne pas copier l'ID
        } else {
        	conjoint = ConjointDto.toEntity(dto);
        }
		
		 return ConjointDto.FromEntity(conjRepository.save(conjoint));
		
		/*objectsValidator.validate(dto);


	        Conjoint conjoint = ConjointDto.toEntity(dto);

	        Conjoint savedEtape= conjRepository.save(conjoint); //employee: entity

	        return ConjointDto.FromEntity(savedEtape); */
        //}
	}

}
