package egovframework.com.cmm;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

import nlib.user.web.LoginController;

public class NlibLoginSuccessHandler implements AuthenticationSuccessHandler {

	private static final Logger log = LoggerFactory.getLogger(LoginController.class);
	
	@Override
	public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
			Authentication authentication) throws IOException, ServletException {

		log.warn("login Test...");
		// 권한을 넣을 리스트를 만듭니다
		List<String> authList = new ArrayList<>();
        
        // 디버깅 테스트
		log.debug("getCredential : " + authentication.getCredentials());
		log.debug("principal : " + authentication.getPrincipal());
		log.debug("들어오는 사용자 : " + authentication.getName());
		log.debug("가진 권한  : " + authentication.getAuthorities());
        
		// 들어온 사용자의 권한을 authList에 추가 (여러개일 수 있으므로 하나씩 담음.)
		authentication.getAuthorities().forEach(auth -> {
			authList.add(auth.getAuthority());
		});

		// 관리자 일 경우
		if (authList.contains("ROLE_ADMIN")) {
			log.debug("관리자 입니다.");
			response.sendRedirect("/login/admin.do");
			return;
		}
		// 회원가입한 사용자일 경우.
		if (authList.contains("ROLE_MEMBER")) {
			log.warn("회원가입된 사용자 입니다.");
			response.sendRedirect("/login/member.do");
			return;
		}
		// 실패했을 경우 그대로 loginPage.jsp로 돌아갑니다.
		response.sendRedirect("/");
	}

}
