package com.itsol.quantrivanphong.manager.project.project.bussiness;

import com.itsol.quantrivanphong.manager.project.project.dto.ProjectDTO;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.manager.project.project.repository.ProjectRepository;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

@Service
public class ProjectBussinessImpl implements ProjectBussiness {
    private Logger logger = Logger.getLogger(ProjectBussinessImpl.class);
    private String views = "";
    @Autowired
    private ProjectRepository projectRepository;

    @Override
    public List<ProjectDTO> findProjectPage(String property, Object value, String sortExperssion, String sortDirection, Integer offset, Integer limit) {
        List<ProjectDTO> projectDTOList = new ArrayList<ProjectDTO>();
        Object[] objects = projectRepository.getEntityPage(property,value,sortExperssion,sortDirection,offset,limit);
        projectDTOList = lstDTO((List<Project>) objects[1]);
        return projectDTOList;
    }

    @Override
    public List<ProjectDTO> findAllProject() {
        try {
            return lstDTO(projectRepository.finAllEntity());
        } catch (Exception e) {
            logger.info("Lỗi findAll " + e.getMessage());
        }
        return null;
    }

    @Override
    public String updateProject(ProjectDTO dto) {
        try {
            ProjectDTO projectDTO = findByProjectId(dto.getId());
            if (dto.getStartDate() == null) {
                views = "ngày bắt đầu dự án không được null";
            } else if (dto.getEndDate() == null) {
                views = "ngày dự kiếm kết thúc dự án không được null";
            } else if (projectDTO != null) {
                ProjectDTO updateProject = modelparseDto(projectRepository.updateEntity(dtoParseModels(dto)));
                if (updateProject != null) {
                    views = "sửa thành công project";
                }
            } else {
                views = "không tìm thấy project phù hợp";
            }
        } catch (Exception e) {
            logger.info("Lỗi update" + e.getMessage());
            views = "lỗi update project";
        }
        return views;
    }

    @Override
    public String saveProject(ProjectDTO dto) {
        try {
            if (dto.getStartDate() == null) {
                views = "ngày bắt đầu dự án không được null";
            } else if (dto.getEndDate() == null) {
                views = "ngày dự kiếm kết thúc dự án không được null";
            } else {
                dto.setStatus(0);
                projectRepository.saveEntity(dtoParseModels(dto));
                views = "thêm thành công project !";
            }
        } catch (Exception e) {
            logger.info("Lỗi insert " + e.getMessage());
            views = "thêm project không thành công!";
        }
        return views;
    }

    @Override
    public ProjectDTO findByProjectId(Integer id) {
        try {
            ProjectDTO projectDTO = modelparseDto(projectRepository.findByEmtityId(id));
            if (projectDTO != null) {
                return projectDTO;
            }
        } catch (Exception e) {
            logger.info("( Lỗi tìm kiếm ) " + e.getMessage());
        }
        return null;
    }


    @Override
    public String deleteProject(Integer[] ids) {
        int count = 0;
        count = projectRepository.deleteEntity(ids);
        if (count != 0) {
            views = "xóa thành công " + count + " project";
        } else {
            views = "project không tồn tại";
        }
        return views;
    }

    @Override
    public String deleteProjectById(Integer id) {
        logger.info("deleteProjectById");
        int count = 0;
        count = projectRepository.deleteEntityByID(id);
        if (count != 0) {
            views = "xóa thành công " + count + " project";
        } else {
            views = "project không tồn tại";
        }
        return views;
    }

    public List<ProjectDTO> lstDTO(List<Project> lstModels) {
        List<ProjectDTO> lstDTO = new ArrayList<>();
        for (Project project : lstModels) {
            lstDTO.add(modelparseDto(project));
        }
        return lstDTO;
    }

    public ProjectDTO modelparseDto(Project model) {
        ProjectDTO dto = new ProjectDTO();
        dto.setId(model.getId());
        dto.setName(model.getName());
        dto.setDescriptions(model.getDescriptions());
        dto.setStartDate(model.getStartDate());
        dto.setEndDate(model.getEndDate());
        dto.setStatus(model.getStatus());

        return dto;
    }

    public Project dtoParseModels(ProjectDTO projectDTO) {
        Project project = new Project();
        project.setId(projectDTO.getId());
        project.setName(projectDTO.getName());
        project.setDescriptions(projectDTO.getDescriptions());
        project.setStartDate(projectDTO.getStartDate());
        project.setEndDate(projectDTO.getEndDate());
        project.setStatus(projectDTO.getStatus());
        return project;
    }
}
