package nlib.user.service;

import java.io.Serializable;
import java.util.Base64;

import nlib.cmm.NlibCommonController;
import nlib.cmm.crypto.AriaCrypto;
import nlib.util.StringUtil;

/**
 * <pre>
 * @Class Name : NlibLoginVO.java
 * 
 * @Description : 로그인VO
 * 
 * 
 * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
 *
 * </pre>
 *
 * @ ------------    --------    ---------------------------
 * @ 수정일                     수정자             수정내용
 * @ ------------    --------    ---------------------------
 * @ 2021. 7. 12.    JSYOO       최초 생성
 * @ 2021. 8. 17.    KNKIM       DB컬럼명으로 변경 처리 
 * @ 2021. 8. 24.    KNKIM       테이블 변경에 따른 컬럼명 전체 변경
 * 
 * @author 이씨플라자 * DIGITALSHIP JSYOO
 * @since 2021. 7. 12.
 * @version 1.0
 *
 */
public class NlibLoginVO implements Serializable {
	
	private static final long serialVersionUID = -8274004534207618049L;

	/* MB_INFO : 소장자료관 회원 관련 */
	private String mbInfoId;		/* 회원아이디 (ex: M1000000001) */
	private String loginUserId;		/* 로그인사용자ID (이메일주소) */
	private String name;			/* 사용자명 */
	private String nameTemp = "";			/* 비밀번호찾기시 사용자이름 임시저장용 */
	private String mobileNo;		/* 휴대전화번호 */
	private String password;		/* 비밀번호 */
	private String email;			/* 이메일 */
	private String gender;			/* 성별(M:남자,F:여자) */
	private String zipCode;			/* 우편번호 */
	private String address;			/* 주소 */
	private String addressDetail;	/* 상세주소 */
	private String birthday;		/* 생년월일 */
	private String status;			/* 상태 : S정상, D탈퇴, P휴면 */
	private String dmtProcDd;       /* 휴면처리일자 (YYYYMMDDHHMISS) */
	private String joinDate;		/* 가입일자 (YYYYMMDD) */
	private String verificationDd;	/* 본인확인일시 (YYYYMMDDHHMISS) */
	private String lastAccessDd;	/* 마지막접근일시 (YYYYMMDDHHMISS) */
	private String leaveSiteDate;	/* 탈퇴일자 (YYYYMMDD) */
	private String regId;			/* 등록자 */
	private String regDd;			/* 등록일자 */
	private String modId;			/* 수정자 */
	private String modDd;			/* 수정일자 */

	/* MB_SITE : 로그인된 문화원정보 관련 */
	private String joinType;		/* 가입유형 : SNS 및 로그인을 연계하는 포털시스템 아이디(naver, daum 등) */
	private String joinCouncilCd;	/* 가입문화원코드 */
	private String joinCouncilNm;	/* 가입문화원명 */
	
	/* MB_SNS : 회원SNS 관련 */
	private String snsType;			/* SNS유형 */
	private String snsId;			/* SNS식별코드 */
	
	/* 보완 및 기타 사항 */
	private String ip;				/* 접속IP */
	private String authorityList;	/* 권한ROLE 리스트 */
	
	private String error = null;	/* 처리 오류코드 */
	private String message = null;	/* 처리 관련 메시지 */

	private String emailTemp = ""; 	/* 이메일 수정시 임시저장 변수 */
	private String emailVrfctNo = null; 	/* 이메일 인증번호 */
	private String emailVrfctDd = null; 	/* 이메일 인증번호 발송일자 */
	
	private String mobileTemp = ""; 	/* 휴대전화번호 변경시 임시저장 변수 */
	private String mobileVrfctNo = null; /* 본인확인 인증번호 */
	private String mobileVrfctDd = null; /* 본인확인 인증번호 발송일자 */
	
	private boolean alerted = false; /* 로그인 후, 읽지 않은 알림 표출 여부 */
	
	private String infoRecvEmailYn = ""; 	/* 대출/열람 수신동의(이메일) */
	private String infoRecvSmsYn = ""; 	/* 대출/열람 수신동의(SMS) */
	private String mktRecvEmailYn = ""; 	/* 지방문화원 소식/홍보 수신동의(이메일) */
	private String mktRecvSmsYn = ""; 	/* 지방문화원 소식/홍보 수신동의 (SMS)*/
	
	private String previousPage =""; /* 이전 페이지명 저장 */
	/**
	 * 개인정보 암호화 내용 양방황 암호화 처리 대상인 항목에 대하여 인코딩 처리 
	 */
	public void encodePrivateInfo() {

		setMobileNo     (AriaCrypto.encode(getMobileNo()));
		setEmail        (AriaCrypto.encode(getEmail()));
		setZipCode      (AriaCrypto.encode(getZipCode()));
		setAddress      (AriaCrypto.encode(getAddress()));
		setAddressDetail(AriaCrypto.encode(getAddressDetail()));
		setBirthday     (AriaCrypto.encode(getBirthday()));
	}
	
	/**
	 * 개인정보 암호화 내용 양방황 암호화 처리 대상인 항목에 대하여 복호화 처리
	 */
	public void decodePrivateInfo() {

		setMobileNo     (AriaCrypto.decode(getMobileNo()));
		setEmail        (AriaCrypto.decode(getEmail()));
		setZipCode      (AriaCrypto.decode(getZipCode()));
		setAddress      (AriaCrypto.decode(getAddress()));
		setAddressDetail(AriaCrypto.decode(getAddressDetail()));
		setBirthday     (AriaCrypto.decode(getBirthday()));
	}
	
	/** 
	 * 지방문화원코드+계정의 이름을 리턴한다. (사용자ID:email형식의 LOGIN_USER_ID 정보)
	 * Spring Security 처리 용 
	 * (non-Javadoc)
	 * @see org.springframework.security.core.userdetails.UserDetails#getUsername()
	 */
	public String getUsername() {
		// 로그인하는 지방문화원 코드 + 로그인사용자ID
		return getLoginUserId();
	}

	//----------------------------------------------------------------
	// SETTER.GETTER
	//----------------------------------------------------------------
	
	public String getMbInfoId() {
		return mbInfoId;
	}

	public void setMbInfoId(String mbInfoId) {
		this.mbInfoId = mbInfoId;
	}

	public String getLoginUserId() {
		return loginUserId;
	}

	public void setLoginUserId(String loginUserId) {
		this.loginUserId = loginUserId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getMobileNo() {
		return mobileNo;
	}

	public void setMobileNo(String mobileNo) {
		this.mobileNo = mobileNo;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getZipCode() {
		return zipCode;
	}

	public void setZipCode(String zipCode) {
		this.zipCode = zipCode;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getAddressDetail() {
		return addressDetail;
	}

	public void setAddressDetail(String addressDetail) {
		this.addressDetail = addressDetail;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getJoinDate() {
		return joinDate;
	}

	public void setJoinDate(String joinDate) {
		this.joinDate = joinDate;
	}

	public String getVerificationDd() {
		return verificationDd;
	}

	public void setVerificationDd(String verificationDd) {
		this.verificationDd = verificationDd;
	}

	public String getLastAccessDd() {
		return lastAccessDd;
	}

	public void setLastAccessDd(String lastAccessDd) {
		this.lastAccessDd = lastAccessDd;
	}

	public String getLeaveSiteDate() {
		return leaveSiteDate;
	}

	public void setLeaveSiteDate(String leaveSiteDate) {
		this.leaveSiteDate = leaveSiteDate;
	}

	public String getRegId() {
		return regId;
	}

	public void setRegId(String regId) {
		this.regId = regId;
	}

	public String getRegDd() {
		return regDd;
	}

	public void setRegDd(String regDd) {
		this.regDd = regDd;
	}

	public String getModId() {
		return modId;
	}

	public void setModId(String modId) {
		this.modId = modId;
	}

	public String getModDd() {
		return modDd;
	}

	public void setModDd(String modDd) {
		this.modDd = modDd;
	}

	public String getJoinType() {
		return joinType;
	}

	public void setJoinType(String joinType) {
		this.joinType = joinType;
	}

	public String getJoinCouncilCd() {
		return joinCouncilCd;
	}

	public void setJoinCouncilCd(String joinCouncilCd) {
		this.joinCouncilCd = joinCouncilCd;
	}

	public String getJoinCouncilNm() {
		return joinCouncilNm;
	}

	public void setJoinCouncilNm(String joinCouncilNm) {
		this.joinCouncilNm = joinCouncilNm;
	}

	public String getSnsType() {
		return snsType;
	}

	public void setSnsType(String snsType) {
		this.snsType = snsType;
	}

	public String getSnsId() {
		return snsId;
	}

	public void setSnsId(String snsId) {
		this.snsId = snsId;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public String getAuthorityList() {
		return authorityList;
	}

	public void setAuthorityList(String authorityList) {
		this.authorityList = authorityList;
	}


	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error = error;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	public String getMobileVrfctNo() {
		return mobileVrfctNo;
	}

	public void setMobileVrfctNo(String mobileVrfctNo) {
		this.mobileVrfctNo = mobileVrfctNo;
	}

	public String getMobileVrfctDd() {
		return mobileVrfctDd;
	}

	public void setMobileVrfctDd(String mobileVrfctDd) {
		this.mobileVrfctDd = mobileVrfctDd;
	}
	public String getEmailVrfctNo() {
		return emailVrfctNo;
	}

	public String getDmtProcDd() {
		return dmtProcDd;
	}

	public void setDmtProcDd(String dmtProcDd) {
		this.dmtProcDd = dmtProcDd;
	}

	public void setEmailVrfctNo(String emailVrfctNo) {
		this.emailVrfctNo = emailVrfctNo;
	}

	public String getEmailVrfctDd() {
		return emailVrfctDd;
	}

	public void setEmailVrfctDd(String emailVrfctDd) {
		this.emailVrfctDd = emailVrfctDd;
	}

	public boolean isAlerted() {
		return alerted;
	}

	public void setAlerted(boolean alerted) {
		this.alerted = alerted;
	}

	public String getMobileTemp() {
		return mobileTemp;
	}

	public void setMobileTemp(String mobileTemp) {
		this.mobileTemp = mobileTemp;
	}

	public String getEmailTemp() {
		return emailTemp;
	}

	public void setEmailTemp(String emailTemp) {
		this.emailTemp = emailTemp;
	}
	
	public String getInfoRecvEmailYn() {
		return infoRecvEmailYn;
	}

	public void setInfoRecvEmailYn(String infoRecvEmailYn) {
		this.infoRecvEmailYn = infoRecvEmailYn;
	}

	public String getInfoRecvSmsYn() {
		return infoRecvSmsYn;
	}

	public void setInfoRecvSmsYn(String infoRecvSmsYn) {
		this.infoRecvSmsYn = infoRecvSmsYn;
	}

	public String getMktRecvEmailYn() {
		return mktRecvEmailYn;
	}

	public void setMktRecvEmailYn(String mktRecvEmailYn) {
		this.mktRecvEmailYn = mktRecvEmailYn;
	}

	public String getMktRecvSmsYn() {
		return mktRecvSmsYn;
	}

	public void setMktRecvSmsYn(String mktRecvSmsYn) {
		this.mktRecvSmsYn = mktRecvSmsYn;
	}

	public String getNameTemp() {
		return nameTemp;
	}

	public void setNameTemp(String nameTemp) {
		this.nameTemp = nameTemp;
	}

	public String getPreviousPage() {
		return previousPage;
	}

	public void setPreviousPage(String previousPage) {
		this.previousPage = previousPage;
	}
	
}
