package incheon.com.cmm.service.impl;

import incheon.com.cmm.service.EgovFileMngService;
import incheon.com.cmm.service.FileVO;
import lombok.RequiredArgsConstructor;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Class Name : EgovFileMngServiceImpl.java
 * @Description : 파일정보의 관리를 위한 구현 클래스
 * @Modification Information
 *
 *    수정일       수정자         수정내용
 *    -------        -------     -------------------
 *    2009. 3. 25.     이삼섭    최초생성
 *
 * @author 공통 서비스 개발팀 이삼섭
 * @since 2009. 3. 25.
 * @version
 * @see
 *
 */
@Service("EgovFileMngService")
@RequiredArgsConstructor
public class EgovFileMngServiceImpl extends EgovAbstractServiceImpl implements EgovFileMngService {

    private final FileManageMapper fileManageMapper;

    /**
     * 여러 개의 파일을 삭제한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List)
     */
    @Override
    public void deleteFileInfs(List<?> fvoList) throws Exception {
	fileManageMapper.deleteFileInfs(fvoList);
    }

    /**
     * 하나의 파일에 대한 정보(속성 및 상세)를 등록한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#insertFileInf(incheon.com.cmm.service.FileVO)
     */
    @Override
	public String insertFileInf(FileVO fvo) throws Exception {
	String atchFileId = fvo.getAtchFileId();

	// 파일 마스터 등록
	fileManageMapper.insertFileMaster(fvo);
	
	// 파일 상세 등록
	fileManageMapper.insertFileInf(fvo);

	return atchFileId;
    }

    /**
     * 여러 개의 파일에 대한 정보(속성 및 상세)를 등록한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#insertFileInfs(java.util.List)
     */
    @Override
    public String insertFileInfs(List<?> fvoList) throws Exception {
	String atchFileId = "";

	if (fvoList.size() != 0) {
	    FileVO vo = (FileVO) fvoList.get(0);
	    atchFileId = vo.getAtchFileId();

	    // 파일 마스터 등록 (첫 번째 파일로)
	    fileManageMapper.insertFileMaster(vo);

	    // 파일 상세 목록 등록
	    fileManageMapper.insertFileInfs(fvoList);
	}
	if("".equals(atchFileId)){
		atchFileId = null;
	}
	return atchFileId;
    }

    /**
     * 파일에 대한 목록을 조회한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#selectFileInfs(incheon.com.cmm.service.FileVO)
     */
    @Override
	public List<FileVO> selectFileInfs(FileVO fvo) throws Exception {
	return fileManageMapper.selectFileInfs(fvo);
    }

    /**
     * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List)
     */
    @Override
	public void updateFileInfs(List<?> fvoList) throws Exception {
	fileManageMapper.updateFileInfs(fvoList);
    }

    /**
     * 하나의 파일을 삭제한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#deleteFileInf(incheon.com.cmm.service.FileVO)
     */
    @Override
	public void deleteFileInf(FileVO fvo) throws Exception {
	fileManageMapper.deleteFileInf(fvo);
    }

    /**
     * 파일에 대한 상세정보를 조회한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#selectFileInf(incheon.com.cmm.service.FileVO)
     */
    @Override
	public FileVO selectFileInf(FileVO fvo) throws Exception {
	return fileManageMapper.selectFileInf(fvo);
    }

    /**
     * 파일 구분자에 대한 최대값을 구한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#getMaxFileSN(incheon.com.cmm.service.FileVO)
     */
    @Override
	public int getMaxFileSN(FileVO fvo) throws Exception {
	return fileManageMapper.getMaxFileSN(fvo);
    }

    /**
     * 전체 파일을 삭제한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#deleteAllFileInf(incheon.com.cmm.service.FileVO)
     */
    @Override
	public void deleteAllFileInf(FileVO fvo) throws Exception {
	fileManageMapper.deleteAllFileInf(fvo);
    }

    /**
     * 파일명 검색에 대한 목록을 조회한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#selectFileListByFileNm(incheon.com.cmm.service.FileVO)
     */
    @Override
	public Map<String, Object> selectFileListByFileNm(FileVO fvo) throws Exception {
	List<FileVO>  result = fileManageMapper.selectFileListByFileNm(fvo);
	int cnt = fileManageMapper.selectFileListCntByFileNm(fvo);

	Map<String, Object> map = new HashMap<String, Object>();

	map.put("resultList", result);
	map.put("resultCnt", Integer.toString(cnt));

	return map;
    }

    /**
     * 이미지 파일에 대한 목록을 조회한다.
     *
     * @see incheon.com.cmm.service.EgovFileMngService#selectImageFileList(incheon.com.cmm.service.FileVO)
     */
    @Override
	public List<FileVO> selectImageFileList(FileVO vo) throws Exception {
	return fileManageMapper.selectImageFileList(vo);
    }
}
