package nlib.user.service.impl;

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

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import egovframework.com.ext.oauth.service.OAuthUniversalUser;
import egovframework.rte.fdl.cryptography.EgovPasswordEncoder;
import nlib.cmm.crypto.AriaCrypto;
import nlib.user.service.MemberService;
import nlib.user.service.NlibLoginVO;
import nlib.user.service.UserInfoService;

/**
 * <pre>
 * @Class Name : UserInfoServiceImpl.java
 * 
 * @Description : 사용자의 정보를 조회하는 서비스 
 * 
 * 
 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
 *
 * </pre>
 *
 * @ ------------    --------    ---------------------------
 * @ 수정일                           수정자                  수정내용
 * @ ------------    --------    ---------------------------
 * @ 2021. 9. 7.    JSYOO       최초 생성
 *
 * 
 * @author 이씨플라자 * DIGITALSHIP JSYOO
 * @since 2021. 9. 7.
 * @version 1.0
 *
 */

@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService
{
    @Resource(name="userInfoDAO")
    private UserInfoDAO userInfoDAO;
    
    @Resource(name = "egovEnvPasswordEncoderService")
    EgovPasswordEncoder egovPasswordEncoder;
    
	@Resource(name = "ariaCrypto")
    AriaCrypto ariaCrypto;
	
    /* 사용자의 SNS 연동 리스트를 조회한다.
     * (non-Javadoc)
     * @see nlib.user.service.UserInfoService#selectSnsSignUpList(nlib.user.service.NlibLoginVO)
     */
    public List<OAuthUniversalUser> selectSnsSignUpList(NlibLoginVO vo) throws Exception {
    	return userInfoDAO.selectSnsSignUpList(vo);
    }
    /* 내 정보를 수정한다.
     * (non-Javadoc)
     * @see nlib.user.service.UserInfoService#updateMyInfo(nlib.user.service.NlibLoginVO)
     */
    public void updateMyInfo(NlibLoginVO vo) throws Exception {
		//회원정보 암호화
		vo.encodePrivateInfo();
		
    	userInfoDAO.updateMyInfo(vo);
    }
    
	/* SNS연동을 해지한다.
	 * (non-Javadoc)
	 * @see nlib.user.service.UserInfoService#deleteSnsLink(egovframework.com.ext.oauth.service.OAuthUniversalUser)
	 */
	public void deleteSnsLink(OAuthUniversalUser oAuthVO) throws Exception {
		userInfoDAO.deleteSnsLink(oAuthVO);
	}
	/* 사용자의 정보를 조회한다.
	 * (non-Javadoc)
	 * @see nlib.user.service.UserInfoService#selectMyInfo(nlib.user.service.NlibLoginVO)
	 */
	public NlibLoginVO selectMyInfo(NlibLoginVO vo) throws Exception {
		vo.setMobileNo(ariaCrypto.encode(vo.getMobileNo()));
		vo.setEmail(ariaCrypto.encode(vo.getEmail()));
		NlibLoginVO loginVO =userInfoDAO.selectMyInfo(vo);
		// 개인정보 암호화 내용 복호화 처리 
		if(loginVO != null) {
			loginVO.setMobileNo(AriaCrypto.decode(loginVO.getMobileNo()));
			loginVO.setEmail(AriaCrypto.decode(loginVO.getEmail()));
		}
		 return loginVO;
	}
	

	/**
	 * 직전 로그인 시간을 조회한다. 
	 * 
	 * @param mbInfoId
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, String>> getLastLogin(String mbInfoId) throws Exception {
		return userInfoDAO.getLastLogin(mbInfoId);
	}
	
	/**
	 * 최근 1건이내 접속한 문화원 정보를 조회한다.
	 * 
	 * @param mbInfoId
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, String>> getVisitedOrgs(String mbInfoId) throws Exception {
		return userInfoDAO.getVisitedOrgs(mbInfoId);
	}
}