package incheon.ags.por.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;

import incheon.ags.por.mapper.PorBoardFileMapper;
import incheon.ags.por.service.PorBoardFileService;
import incheon.ags.por.vo.PorBoardFileVO;
import incheon.ags.por.vo.PorFileVO;
import lombok.RequiredArgsConstructor;

/**
 * 게시물 파일 관리를 위한 서비스 구현 클래스
 */
@Service("porBoardFileService")
@RequiredArgsConstructor
public class PorBoardFileServiceImpl extends EgovAbstractServiceImpl implements PorBoardFileService {

    private final PorBoardFileMapper porBoardFileMapper;
    
    /**
     * 게시물 파일 목록을 조회한다.
     * @param PorBoardFileVO - 조회할 정보가 담긴 BoardFileVO
     * @return 게시물 파일 목록
     * @exception Exception
     */
    @Override
    public List<PorFileVO> selectBoardFileList(PorBoardFileVO boardFileVO) throws Exception {
        return porBoardFileMapper.selectBoardFileList(boardFileVO);
    }
    
    /**
     * 게시물 파일을 상세조회한다.
     * @param PorFileVO - 조회할 정보가 담긴 PorFileVO
     * @return 게시물 파일
     * @exception Exception
     */
    @Override
    public PorFileVO selectBoardFile(PorFileVO porFileVO) throws Exception {
    	return porBoardFileMapper.selectBoardFile(porFileVO);
    }
    
    /**
     * 게시물 파일을 등록한다.
     * @param PorBoardFileVO - 등록할 정보가 담긴 BoardFileVO
     * @return 등록 성공 여부
     * @exception Exception
     */
    @Override
    public Long insertBoardFile(PorBoardFileVO boardFileVO) throws Exception {
        return porBoardFileMapper.insertBoardFile(boardFileVO);
    }
    
    /**
     * 게시물 파일을 삭제한다.
     * @param PorBoardFileVO - 삭제할 정보가 담긴 BoardFileVO
     * @return 삭제 성공 여부
     * @exception Exception
     */
    @Override
    public Integer deleteBoardFile(PorBoardFileVO boardFileVO) throws Exception {
    	return porBoardFileMapper.deleteBoardFile(boardFileVO);
    }
    
    /**
     * 첨부파일을 이미지, 일반파일 List로 분리한다.
     * @param List<FileVO> - 분배할 정보가 담긴 FileVO
     * @return 분배 결과물 Map Object
     * @exception Exception
     */
    @Override
    public Map<String, Object> distributeFileList(List<PorFileVO> fileList) throws Exception {
    	Map<String, Object> distributeMap = new HashMap<String, Object>();
    	List<String> imgList = new ArrayList<String>();
    	imgList.add("png");
    	imgList.add("jpg");
    	imgList.add("jpeg");
    	imgList.add("gif");
    	imgList.add("svg");
    	
    	if(fileList != null && fileList.size() > 0) {
    		distributeMap.put("imgList", fileList.stream().filter(file -> 
    			imgList.stream().anyMatch(
    					Predicate.isEqual(file.getAtchFileExtnNm().toLowerCase())
    			)
    		).collect(Collectors.toList()));
    		distributeMap.put("fileList", fileList.stream().filter(file -> 
    		imgList.stream().noneMatch(
    				Predicate.isEqual(file.getAtchFileExtnNm().toLowerCase())
    				)
    				).collect(Collectors.toList()));
    	}
    	
    	return distributeMap;
    }
} 