package itn.com.cmm.service.impl;

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

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import itn.com.cmm.service.EgovFileMngService;
import itn.com.cmm.service.FileVO;

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

	@Resource(name = "FileManageDAO")
	private FileManageDAO fileMngDAO;

	/**
	 * 여러 개의 파일을 삭제한다.
	 *
	 * @see itn.com.cmm.service.EgovFileMngService#deleteFileInfs(java.util.List)
	 */
	@Override
	@SuppressWarnings("rawtypes")
	public void deleteFileInfs(List fvoList) throws Exception {
		fileMngDAO.deleteFileInfs(fvoList);
	}

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

		fileMngDAO.insertFileInf(fvo);

		return atchFileId;
	}

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

		if (fvoList.size() != 0) {
			atchFileId = fileMngDAO.insertFileInfs(fvoList);
		}
		if (atchFileId == "") {
			atchFileId = null;
		}
		return atchFileId;
	}

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

	/**
	 * 여러 개의 파일에 대한 정보(속성 및 상세)를 수정한다.
	 *
	 * @see itn.com.cmm.service.EgovFileMngService#updateFileInfs(java.util.List)
	 */
	@SuppressWarnings("rawtypes")
	@Override
	public void updateFileInfs(List fvoList) throws Exception {
		//Delete & Insert
		fileMngDAO.updateFileInfs(fvoList);
	}

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

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

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

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

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

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

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

		return map;
	}

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

	/*단일 파일업데이트*/
	@Override
	public void updateFileInfo(List fvoList) throws Exception {
		//Delete & Update
		fileMngDAO.updateFileInfo(fvoList);
	}

	@Override
	public void deleteFmsFileInf(FileVO fileVO) throws Exception {
		FileVO returnFileVO = new FileVO();
		returnFileVO = fileMngDAO.selectFileInf(fileVO);
		if(returnFileVO !=null) {
			File delFile = new File(returnFileVO.getFileStreCours()+returnFileVO.getStreFileNm());
			delFile.delete(); //실제파일  deletePerFile 삭제
		}
		//lettnfiledetail pk 인 lettnfile 는 삭제 안함
		fileMngDAO.deleteFileInf(fileVO); //DB삭제
	}
}
