package org.egl_cepgl.pm.service;

import lombok.extern.slf4j.Slf4j;
import org.egl_cepgl.pm.dto.ProjectDto;
import org.egl_cepgl.pm.dto.UserDto;
import org.egl_cepgl.pm.exception.ErrorCodes;
import org.egl_cepgl.pm.exception.InvalidEntityException;
import org.egl_cepgl.pm.model.ProcurementCategory;
import org.egl_cepgl.pm.model.Project;
import org.egl_cepgl.pm.repository.ProjectRepository;
import org.egl_cepgl.pm.repository.UserRepository;
import org.egl_cepgl.pm.validator.UserValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
public class ProjectService {

    private ProjectRepository projectRepository;

    @Autowired
    public ProjectService(ProjectRepository projectRepository) {
        this.projectRepository = projectRepository;
    }

    public ProjectDto addProject(ProjectDto projectDto)
    {
        return ProjectDto.fromEntity(this.projectRepository.save(ProjectDto.toEntity(projectDto)));
    }

    public Page<Project> findAll(String search, int page, int size)
    {
        Pageable paging = PageRequest.of(page, size);
        Page<Project> objs;
        if (search == null) {
            objs = this.projectRepository.findAll(paging);
        } else {
            objs = this.projectRepository.findByNamepContaining(search, paging);
        }
        return objs;
    }

    public Project update(Project project)
    {
        return this.projectRepository.save(project);
    }

    public void delete(Long id)
    {
        if(id == null){
            log.error("ID est null");
            return;
        }
        projectRepository.deleteById(id);
    }
}
