package kr.co.uplus.ez.api.login.dto;

import java.util.Collection;

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

import kr.co.uplus.ez.common.utils.EncryptionUtil;
import lombok.Setter;
import lombok.ToString;

// security authUser
@ToString
@Setter
public class AuthUser implements UserDetails {
	private static final long serialVersionUID = -2568297930450189586L;

	private String oprtrId;				// 운영자 ID
	private String oprtrNm;             // 운영자 명
	private String sttusCd;             // 상태_코드
	private String pwd;                 // 비밀번호
	private String tmpPwdYn;			// 임시비밀번호 여부.
	private String email;               // 이메일 주소
	private String hpNo;                // 휴대폰 번호
	private String autCd;               // 권한 코드
	private int authchrFailCnt;         // 인증문자 실패 횟수
	private String rFrshTkn;            // 리프레쉬 토큰
	private String rFrshTknDt;          // 리프레쉬 토큰 발행 일시
	private int refreshTokenExpiration; // 리프레쉬 토큰 만료 시간(초).
	private String lastLoginDt;         // 마지막 로그인 일시
	private int loginFailCnt;           // 로그인 실패 횟수
	private String pwdChgDt;            // 비밀번호 변경 일시
	private String regId;               // 등록 ID
	private String regDt;               // 등록 일시
	private String chgId;               // 변경 ID
	private String chgDt;               // 변경 일시
	private String inputPwd;            // 화면 입력 비밀번호
	private String agencyCd;            // 대리점 코드
	private String accNm;               // 대리점 명
	private String accSttusCd;          // 계정 상태 코드
	private String pwChangeCheck;		// 비밀번호 변경 여부
	private String pwdOld;				// 이전 비밀번호 

	private Collection<? extends GrantedAuthority> authorities;


	public String getOprtrId() {
		return oprtrId;
	}
	private String corpId; // temp data

	public String getCorpId() {
		return corpId;
	}

	public String getUsername() {
		String uname = "";
		if (corpId != null && !"".equals(corpId)) {
			uname += corpId + ".";
		}
		uname += oprtrId;
		return uname;
	}

	public Collection<? extends GrantedAuthority> getAuthorities() {
		return authorities;
	}

	public String getSttusCd() {
		return sttusCd;
	}

//	public void setPwd(String pwd) {
//		this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, pwd);
//	}
	public void setInputPwd(String inputPwd) {
		this.pwd = EncryptionUtil.getCustomSHA512(this.oprtrId, inputPwd);
	}

	public String getInputPwd() {
		return inputPwd;
	}

	public String getPwd() {
		return pwd;
	}

	public String getEmail() {
		return email;
	}

	public String getHpNo() {
		return hpNo;
	}

	public String getAutCd() {
		return autCd;
	}

	public int getAuthchrFailCnt() {
		return authchrFailCnt;
	}

	public String getRfreshTkn() {
		return rFrshTkn;
	}

	public String getRfreshTknDt() {
		return rFrshTknDt;
	}

	public String getLastLoginDt() {
		return lastLoginDt;
	}

	public int getLoginFailCnt() {
		return loginFailCnt;
	}

	public String getPwdChgDt() {
		return pwdChgDt;
	}

	public String getRegId() {
		return regId;
	}

	public String getRegDt() {
		return regDt;
	}

	public String getChgId() {
		return chgId;
	}

	public String getChgDt() {
		return chgDt;
	}

	public boolean isAccountNonExpired() {
		return true;
	}

	public boolean isAccountNonLocked() {
		return sttusCd.equals("01");
	}

	public boolean isCredentialsNonExpired() {
		return true;
	}

	public boolean isEnabled() {
		return sttusCd.equals("01");
	}

	public String getPassword() {
		//return "{noop}"+pwd;
		return pwd;
	}

	public String getAgencyCd() {
		return agencyCd;
	}

	public String getAccNm() {
		return accNm;
	}

	public String accSttusCd() {
		return accSttusCd;
	}

	public String getTmpPwdYn() {
		return tmpPwdYn;
	}

	public int getRefreshTokenExpiration() {
		return refreshTokenExpiration;
	}

	public String getrFrshTkn() {
		return rFrshTkn;
	}

	public String getrFrshTknDt() {
		return rFrshTknDt;
	}

	public String getOprtrNm() {
		return oprtrNm;
	}

	public String getAccSttusCd() {
		return accSttusCd;
	}

	public String getPwChangeCheck() {
		return pwChangeCheck;
	}
	
	public String getPwdOld() {
		return pwdOld;
	}
}