package nlib.security;

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import nlib.cmm.crypto.AriaCrypto;
import nlib.cmm.service.NlibProperty;
import nlib.user.service.NlibLoginVO;

/**
 * <pre>
 * @Class Name : SecUserVO.java (VO)
 * 
 * @Description : 스프링 시큐리티용으로, UserDtails 인터페이스를 구현한 사용자정보 VO 클래스 
 * 
 * 
 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
 *
 * </pre>
 *
 * @ ------------    --------    ---------------------------
 * @ 수정일                     수정자             수정내용
 * @ ------------    --------    ---------------------------
 * @ 2021. 7. 7.    KNKIM       최초 생성
 *
 * 
 * @author 이씨플라자 * DIGITALSHIP KNKIM
 * @since 2021. 7. 7.
 * @version 1.0
 *
 */
public class SecUserVO extends NlibLoginVO implements UserDetails {
	
	private static final long serialVersionUID = -8274004534207618048L;
	
	/* 권한 ROLE 명칭 */
	public static final String ROLE_USER   = NlibProperty.getString("auth.role.user");   // 일반사용자 
	public static final String ROLE_ADMIN  = NlibProperty.getString("auth.role.admin");  // 관리자 
	public static final String ROLE_SYSTEM = NlibProperty.getString("auth.role.system"); // 시스템관리자 
	
	/* 기본권한 ROLE */
	public static final String DEFAULT_ROLE = ROLE_USER;
	
	ArrayList<GrantedAuthority> auth = null; /* 권한 목록 */
	
	public void addAuthority(String authName) {
		if(auth == null) auth = new ArrayList<GrantedAuthority>();
		auth.add(new SimpleGrantedAuthority(authName));
	}
	
	/* 계정이 갖고있는 권한 목록을 리턴한다.
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#getAuthorities()
	 */
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
        return auth;
	}

	/* 계정의 비밀번호를 리턴한다.
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#getPassword()
	 */
	@Override
	public String getPassword() {
		return super.getPassword();
	}

	/* 계정의 이름을 리턴한다. (사용자ID:email형식의 LOGIN_USER_ID 정보)
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#getUsername()
	 */
	@Override
	public String getUsername() {
		// 로그인하는 지방문화원 코드 + 로그인사용자ID
		return super.getUsername();
	}

	/* 계정이 만료되지 않았는 지 여부를 리턴한다. (true: 만료안됨)
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonExpired()
	 */
	@Override
	public boolean isAccountNonExpired() {
		
		// 계정 만료 기능 사용안함 
		return true;
	}

	/* 계정이 잠겨있지 않은 지 여부를 리턴한다. (true: 잠기지 않음)
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonLocked()
	 */
	@Override
	public boolean isAccountNonLocked() {
		
		// SNS 로그인만 허용하므로, 별도 계정 LOCK 기능 불필요   
		return true;
	}

	/* 비밀번호가 만료되지 않았는 지 리턴한다. (true: 만료안됨)
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#isCredentialsNonExpired()
	 */
	@Override
	public boolean isCredentialsNonExpired() {
		
		// 비밀번호 만료 기능 사용안함 
		return true;
	}

	/* 계정이 활성화(사용가능)된 상태인 지 여부를 리턴한다. (true: 활성화)
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#isEnabled()
	 */
	@Override
	public boolean isEnabled() {
		
		// 계정 활성화, 비활성화 기능 사용 안함 
		return true;
	}

}
