/*
 * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
 */
package kr.co.zumo.app.lifeplus.model.module;

import kr.co.zumo.app.lifeplus.bean.api.LoginBean;
import kr.co.zumo.app.lifeplus.bean.api.LoginResultBean;
import kr.co.zumo.app.lifeplus.model.SuperModel;

/**
 * LoginModuleParser
 * <pre>
 * </pre>
 *
 * @author 민효동
 * @version 1.0
 * @history 민효동   [2018-10-10]   [최초 작성]
 * @since 2018-10-10
 */
public class LoginModuleParser {

  /**
   * 로그인 API 의 결과를 파싱하여 성공/실패를 구분하여 모델에 setting 해준다.
   *
   * @param loginResultBean LoginResultBean
   * @return true: 정상적으로 파싱됨, false: API 통신은 성공(200)했지만 데이터 포맷 등의 이상으로 오류
   */
  public boolean parse(LoginResultBean loginResultBean) {
    if (null == loginResultBean) {
      return false;
    }

    if (loginResultBean.isSuccess()) {
      LoginBean loginBean = loginResultBean.getData();
      if (loginBean.isNormal()) {
        // token 저장
        SuperModel.getInstance().setToken(loginBean.getToken());

        return true;
      }
      else {
        if (loginBean.getBlockStatus().equals(LoginBean.LOCK_STATUS_BLOCK)) {
          // 블럭 계정
          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
        }

        if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_REST)) {
          // 휴면 계정
          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
        }

        if (loginBean.getMemberStatus().equals(LoginBean.USER_STATUS_OUT)) {
          // 탈퇴 계정
          SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_OUT);
        }

        return verify();
      }

    }
    else {
      // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
      if (loginResultBean.getCode() == -100) {
        // 블럭 계정
        SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_BLOCK);
        return verify();
      }
      else if (loginResultBean.getCode() == -200) {
        // 휴면 계정
        SuperModel.getInstance().addMemberStatus(SuperModel.MEMBER_STATUS_BIT_REST);
        return verify();
      }
      else
      // fixme 서버 연동 포멧이 틀려서 임시로 처리 중 -------------
      {
        // 서버와 통신 완료 후 에러 리턴
        return false;
      }
    }
  }

  private boolean verify() {

    if (SuperModel.getInstance().isBlockMember()) {
      return true;
    }
    else if (SuperModel.getInstance().isRestMember()) {
      return true;
    }
    else if (SuperModel.getInstance().isOutMember()) {
      return true;
    }
    else {
      // data 이상
      return false;
    }
  }
}
