package kr.co.zumo.app.lifeplus.view.fragment.signup;

import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;

import kr.co.zumo.app.lifeplus.view.Event;
import kr.co.zumo.app.lifeplus.view.presenter.signup.SignUpItem;

/**
 * BaseViewHolder
 * <pre>
 * </pre>
 *
 * @author 하세미
 * @version 1.0
 * @history 하세미   [2018-09-11]   [최초 작성]
 * @since 2018-09-11
 */
public abstract class BaseViewHolder extends RecyclerView.ViewHolder {

  public BaseViewHolder(View itemView) {
    super(itemView);
  }

  /**
   * SignUpItem 데이터를 자신에게 반영한다.
   *
   * @param item SignUpItem
   */
  abstract void draw(SignUpItem item);

  /**
   * UI 사용을 disabled 시킨다.
   */
  public abstract void setDisabled();

  /**
   * UI 사용을 enabled 시킨다.
   */
  public abstract void setEnabled();

  /**
   * holder 생성 시 실행된다.
   * SignUpAdapter 에서 호출된다.
   *
   * @param item
   */
  public void notifyCreation(SignUpItem item) {

    ISignUpHolderEventListener listener = item.getEventListener();
    if (null != listener) {
      listener.onSignUpHolderEvent(this, Event.HOLDER_CREATED);
    }
  }

  /**
   * SignUpItem 정렬을 반영한다.
   *
   * @param item SignUpItem
   */
  public final void align(SignUpItem item) {

    int alignType = item.getAlignType();
    LinearLayout layout = (LinearLayout) itemView;

    if (null == itemView) {
      throw new Error("must wrap with LinearLayout.");
    }

    if (alignType == SignUpItem.ALIGN_START) {
      layout.setGravity(Gravity.START);
    }
    else if (alignType == SignUpItem.ALIGN_END) {
      layout.setGravity(Gravity.END);
    }
    else if (alignType == SignUpItem.ALIGN_CENTER) {
      layout.setGravity(Gravity.CENTER);
    }
  }
}
