package com.style24.admin.biz.service;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.style24.admin.biz.dao.TsaLoginDao;
import com.style24.admin.support.security.session.TsaSession;
import com.style24.persistence.domain.Menu;
import com.style24.persistence.domain.User;

import lombok.extern.slf4j.Slf4j;

/**
 * 운영관리 Service
 *
 * @author gagamel
 * @since 2019. 12. 4
 */
@Service
@Slf4j
public class TsaLoginService {

	@Autowired
	private TsaLoginDao loginDao;

	@Autowired
	private Environment env;

	/**
	 * 사용자ID로 사용자 정보 조회
	 * @param userId - 사용자ID
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
	public User getUserById(String userId) {
		return loginDao.getUserById(userId);
	}

	/**
	 * 로그인실패 남기기. 로그인실패여부가 "N:성공"이면 실패건수 0으로 초기화
	 * @param userNo - 사용자번호
	 * @param loginFailYn - 로그인실패여부(Y:실패, N:성공)
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
	@Transactional("shopTxnManager")
	public void createLoginFail(Integer userNo, String loginFailYn) {
		User user = new User();
		user.setUserNo(userNo);
		user.setIpAddr(TsaSession.getIpAddress());
		user.setLoginFailYn(loginFailYn);
		loginDao.createLoginFail(user);
	}

	/**
	 * 로그인 실패건수 조회
	 * @param userNo - 사용자번호
	 * @return 로그인 실패건수
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
	public int getLoginFailCount(Integer userNo) {
		User user = new User();
		user.setUserNo(userNo);
		user.setIpAddr(TsaSession.getIpAddress());
		return loginDao.getLoginFailCount(user);
	}

	/**
	 * 최종로그인일시 Update
	 * @param userNo - 사용자번호
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
	@Transactional("shopTxnManager")
	public void updateLastLoginDate(Integer userNo) {
		loginDao.updateLastLoginDate(userNo);
	}

	/**
	 * 로그인이력 남기기
	 * @param userNo - 사용자번호
	 * @author gagamel
	 * @date 2020. 10. 5
	 */
	@Transactional("shopTxnManager")
	public void createLoginHistory(Integer userNo) {
		User user = new User();
		user.setUserNo(userNo);
		user.setIpAddr(TsaSession.getIpAddress());

		loginDao.createLoginHistory(user);
	}

	/**
	 * 로그인 메뉴 목록
	 * @param userNo - 사용자번호
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 5
	 */
	public Collection<Menu> getLoginMenuList(Integer userNo) {
		return loginDao.getLoginMenuList(userNo);
	}

}
