package kr.itn.itnhub.org;

public class Organization {

    private Long id;
    private String orgNo;
    private String orgName;
    private String channelSlug;
    private String deptName;
    private String managerName;
    private String managerTitle;
    private String managerPhone;
    private String managerEmail;
    private String channelIdMj;
    private String channelIdLaw;

    /**
     * 상태는 저장하지 않고 항상 파생한다.
     * 저장하면 채널ID와 상태가 어긋나는 순간이 생기고, 그 어긋남을 고칠 방법이 없다.
     */
    public OrgStatus getStatus() {
        boolean mj = filled(channelIdMj);
        boolean law = filled(channelIdLaw);

        if (mj && law) {
            return OrgStatus.ACTIVE;
        }
        if (mj || law) {
            return OrgStatus.PARTIAL;
        }
        return hasRequiredContact() ? OrgStatus.READY : OrgStatus.INFO_PENDING;
    }

    /** 직급/직함은 비어 있는 기관이 실제로 있으므로 필수에서 뺀다. */
    public boolean hasRequiredContact() {
        return filled(deptName)
                && filled(managerName)
                && filled(managerPhone)
                && filled(managerEmail);
    }

    private static boolean filled(String value) {
        return value != null && !value.isBlank();
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getOrgNo() { return orgNo; }
    public void setOrgNo(String orgNo) { this.orgNo = orgNo; }

    public String getOrgName() { return orgName; }
    public void setOrgName(String orgName) { this.orgName = orgName; }

    public String getChannelSlug() { return channelSlug; }
    public void setChannelSlug(String channelSlug) { this.channelSlug = channelSlug; }

    public String getDeptName() { return deptName; }
    public void setDeptName(String deptName) { this.deptName = deptName; }

    public String getManagerName() { return managerName; }
    public void setManagerName(String managerName) { this.managerName = managerName; }

    public String getManagerTitle() { return managerTitle; }
    public void setManagerTitle(String managerTitle) { this.managerTitle = managerTitle; }

    public String getManagerPhone() { return managerPhone; }
    public void setManagerPhone(String managerPhone) { this.managerPhone = managerPhone; }

    public String getManagerEmail() { return managerEmail; }
    public void setManagerEmail(String managerEmail) { this.managerEmail = managerEmail; }

    public String getChannelIdMj() { return channelIdMj; }
    public void setChannelIdMj(String channelIdMj) { this.channelIdMj = channelIdMj; }

    public String getChannelIdLaw() { return channelIdLaw; }
    public void setChannelIdLaw(String channelIdLaw) { this.channelIdLaw = channelIdLaw; }
}
