package kcg.faics.susa.service.impl;

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

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import kcg.faics.cmmn.bbs.BaseFileService;
import kcg.faics.cmmn.egov.file.EgovFileMngUtil;
import kcg.faics.cmmn.egov.vo.FileVO;
import kcg.faics.susa.vo.SusaFileVO;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;

/**
 * 외사수사 파일 관련 비지니스 로직 클래스.
 * 
 * @author kimnomin
 *
 */
@Service("susaFileService")
//public class SusaFileServiceImpl extends EgovAbstractServiceImpl implements SusaFileService  {
public class SusaFileServiceImpl extends EgovAbstractServiceImpl implements BaseFileService<SusaFileVO> {
	/**
	 * property 파일에서 읽은 저장 경로 키워드. 
	 */
	private String filePathKeyword = "Susa.in.fileStorePath";
	
	/**
	 * property 파일에서 읽은 저장 경로 키워드를 반환한다.
	 * 
	 * @return property 파일에서 읽은 저장 경로 키워드
	 */
	public final String getFilePathKeyword() {
		return filePathKeyword;
	}

	/**
	 * property 파일에서 읽은 저장 경로 키워드 설정한다.
	 * 
	 * @param filePathKeyword property 파일에서 읽은 저장 경로 키워드
	 */
	public final void setFilePathKeyword(final String filePathKeyword) {
		this.filePathKeyword = filePathKeyword;
	}

	/**
	 * 생성자.
	 */
	public SusaFileServiceImpl() {
		
	}
	
	/**
	 * 생성자.
	 * 
	 * @param filePathKeyword property 파일에서 읽은 저장 경로 키워드
	 */
	public SusaFileServiceImpl(final String filePathKeyword) {
		setFilePathKeyword(filePathKeyword);
	}
	
	/**
	 * 외사수사 관련 파일 Mapper 클래스.
	 */
	@Resource(name = "susaFileMapper")
	private SusaFileMapper susaFileMapper;
	
    /**
	 * 전자정부프레임워크에서 제공되는 파일 업로드 처리 관련 Utility.
	 **/
	@Resource(name = "EgovFileMngUtil")
	private EgovFileMngUtil fileUtil;
	
	@Override
	public SusaFileVO select(final SusaFileVO fileVO) throws Exception {
		return susaFileMapper.selectFile(fileVO);
	}
	
	@Override
	public List<SusaFileVO> selectList(final SusaFileVO fileVO) throws Exception {
		return susaFileMapper.selectFiles(fileVO);
	}

	@Override
	public int insert(final SusaFileVO fileVO) throws Exception {
		return susaFileMapper.insertFile(fileVO);
	}

	@Override
	public int delete(final SusaFileVO fileVO) throws Exception {
		return susaFileMapper.deleteFile(fileVO);
	}

	@Override
	public int insertAndSaveFiles(final SusaFileVO fileVO, final Map<String, MultipartFile> fileMap) throws Exception {
		int result = 1;
		
		if (fileMap != null) {
			String prevFileName = String.format("%06d", fileVO.getParentSeq());
			SusaFileVO vo = fileVO;
			List<FileVO> uploadedFile = fileUtil.parseFileInf(fileMap, prevFileName + "_", 0, "", filePathKeyword);
			
			for (int i = 0; i < uploadedFile.size(); i++) {
				FileVO tmpVO = uploadedFile.get(i);
				vo.setOrgName(tmpVO.getOrignlFileNm());
				vo.setSaveName(tmpVO.getStreFileNm());
				vo.setOrders(Integer.parseInt(tmpVO.getFileSn().replace("file", "")));
				result = insert(fileVO);
				if (result != 1) {
					throw new Exception();
				}
			}
		}
		
		return result;
	}

	@Override
	public int deleteAndRemoveFile(final SusaFileVO fileVO) throws Exception {
		int result = susaFileMapper.deleteFile(fileVO);
		if (result == 1) {
			try {
				fileUtil.deleteFile(fileVO.getSaveName(), filePathKeyword);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return result;
	}
	
	@Override
	public int deleteAndRemoveFiles(final SusaFileVO fileVO) throws Exception {
		int deletedCnt = 0;
		List<SusaFileVO> susaFileVOList = selectList(fileVO);
		for (int i = 0; i < susaFileVOList.size(); i++) {
			if (deleteAndRemoveFile(susaFileVOList.get(i)) == 1) {
				deletedCnt += 1;	
			}
		}
		return deletedCnt;
	}
}
