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

import com.google.gson.Gson;

import kr.co.zumo.app.lifeplus.view.fragment.signup.ISignUpHolderEventListener;

/**
 * 회원 가입의 대화형 화면에 사용되는 각 아이템의 데이터 객체
 * <pre>
 * </pre>
 *
 * @author 민효동
 * @version 1.0
 * @history 민효동   [2018. 9. 11.]   [최초 작성]
 * @since 2018. 9. 11.
 */
public class SignUpItem {

  public static final int SIGN_UP_TEXT = 0;
  public static final int SIGN_UP_BENEFIT = 1;
  public static final int SIGN_UP_TEXT_WITH_TITLE = 2;
  public static final int SIGN_UP_BUTTON = 3;
  public static final int SIGN_UP_TWO_BUTTON = 4;
  public static final int SIGN_UP_TERMS = 5;
  public static final int SIGN_UP_WAITING = 6;
  public static final int SIGN_UP_COIN = 7;
  public static final int SIGN_UP_NOTICE = 8;
  public static final int SIGN_UP_DIVIDER = 9;
  public static final int SIGN_UP_AGREE = 10;

  public static final int ALIGN_START = 100;
  public static final int ALIGN_CENTER = 101;
  public static final int ALIGN_END = 102;

  public static final int BUTTON_ID_PIN = 1000;
  public static final int BUTTON_ID_JOINED = 1001;
  public static final int BUTTON_MOBILE_AUTHORIZATION = 1003;
  public static final int BUTTON_AGREE_COMPLETE = 1005;

  public static final int AGREE_FALSE = 2000;
  public static final int AGREE_TRUE = 2001;

  protected String jsonString;
  protected int itemType;
  protected int alignType;
  protected ISignUpHolderEventListener eventListener;

  /**
   * 회원 가입에 사용되는 아이템
   *
   * @param itemType   텍스트, 버튼 등 아이템의 타입 지정
   * @param alignType  정렬 타입 지정
   * @param jsonString 타입에 사용되는 json 타입의 데이터
   */
  public SignUpItem(int itemType, int alignType, String jsonString) {
    this.jsonString = jsonString;
    this.itemType = itemType;
    this.alignType = alignType;
  }

  public SignUpItem(int itemType, int alignType) {
    this.itemType = itemType;
    this.alignType = alignType;
  }

  public SignUpItem(int itemType, String jsonString) {
    this.jsonString = jsonString;
    this.itemType = itemType;
  }

  public SignUpItem(int itemType) {
    this.itemType = itemType;
  }

  public SignUpItem(int itemType, int alignType, String jsonString, ISignUpHolderEventListener eventListener) {
    this.jsonString = jsonString;
    this.itemType = itemType;
    this.alignType = alignType;
    this.eventListener = eventListener;
  }

  public SignUpItem(int itemType, int alignType, ISignUpHolderEventListener eventListener) {
    this.itemType = itemType;
    this.alignType = alignType;
    this.eventListener = eventListener;
  }

  public SignUpItem(int itemType, String jsonString, ISignUpHolderEventListener eventListener) {
    this.jsonString = jsonString;
    this.itemType = itemType;
    this.eventListener = eventListener;
  }

  public SignUpItem(int itemType, ISignUpHolderEventListener eventListener) {
    this.itemType = itemType;
    this.eventListener = eventListener;
  }

  /**
   * holder 의 이벤트를 처리하기 위한 리스너를 반환
   *
   * @return ISignUpHolderEventListener
   */
  public ISignUpHolderEventListener getEventListener() {
    return eventListener;
  }

  /**
   * 아이템의 데이터로 사용되는 string
   *
   * @return json 스트링
   */
  public String getJsonString() {
    return jsonString;
  }

  /**
   * 아이템 타입
   *
   * @return 아이템 타입, SIGN_UP_TEXT ...
   */
  public int getItemType() {
    return itemType;
  }

  /**
   * jsonString 를 Bean Object 로 변환하여 반환
   *
   * @param beanClass 변환할 Bean 의 클래스
   * @return 변환된 클래스
   */
  public <T> T getBean(Class<T> beanClass) {
    return new Gson().fromJson(jsonString, beanClass);
  }

  /**
   * 좌/우/중앙 정렬
   *
   * @return ALIGN_START|ALIGN_CENTER|ALIGN_END
   */
  public int getAlignType() {
    return alignType;
  }
}
