package sgc.portal.base;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import sgc.portal.SgcPortalAttributes;
import sgc.portal.base.util.SessionUtil;
import sgc.portal.com.sym.user.model.UserDetails;
import lombok.Data;

import java.util.Date;

/**
 * <pre>
 * 모든 Model 객체의 최상위 클래스 역할을 한다.
 * 최초 등록일, 등록자 등 반복되는 코드를 줄이고 일정 부분 자동화한다.
 * (로그인 사용자의 아이디를 자동으로 set.. 등)
 * Domain 클래스를 상속받은 Model 클래스는 로그인 사용자 정보, 최초 등록일/등록자 아이디
 * 그리고 수정일/수정다 아이디를 자동으로 설정되어 편하게 사용할 수 있다.
 * </pre>
 *
 * @author beomgeun.lee
 * @version 2019.11.11
 * @since JDK1.8
 */

@Getter
public class Domain {
    @JsonIgnore
    private Date wrteDt;

    @JsonIgnore
    private String wrtePr;

    @JsonIgnore
    private Date mdftDt;

    @JsonIgnore
    private String mdftPr;

    @JsonIgnore
    private String corpCd;
    
    @JsonIgnore
    private String cmpnCd;
    
    @JsonIgnore
    private String psnlinfoIqryn;

    /**
     * Instantiates a new Domain.
     */
    public Domain() {
        this.wrteDt = new Date();
        this.mdftDt = new Date();

        try {
            UserDetails userDetails = this.getUserDetails();
            //String id = (userDetails != null) ? userDetails.getLginId() : "__anonymous__";
            String id = (userDetails != null) ? userDetails.getEmpNo() : "__anonymous__";
            this.wrtePr = id;
            this.mdftPr = id;
            this.cmpnCd = userDetails.getCmpnCd();
            this.psnlinfoIqryn = userDetails.getPsnlinfoIqryn();
        } catch (Exception e) {
            this.wrtePr = "SYSTEM";
            this.mdftPr = "SYSTEM";
        }
    }

    /**
     * Gets user details.
     *
     * @return the user details
     */
    @JsonIgnore
    public final UserDetails getUserDetails() {
        return SessionUtil.getUserDetails();
    }
}