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

import android.arch.lifecycle.ViewModelProviders;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

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

  /**
   * Android life-cycle 에 귀속되는 모델을 반환한다.
   * - 사실 MVVM 사용되는 ViewModel 이지만 MVP 의 Model 로 사용한다.
   * - Activity 의 종속성을 이용하여 Model 을 참조하기 위함
   * - key 를 지정하여 clear 가능하도록 준비한다.
   *
   * @param activity   FragmentActivity
   * @param modelClass MainModel.class
   * @return new MainModel()
   */
  public static <T extends Model> T getModel(FragmentActivity activity, Class<T> modelClass) {
    Log.e("APP#  ModelProvider | getModel", "|" + modelClass.getCanonicalName());
    return ViewModelProviders.of(activity).get(modelClass.getCanonicalName(), modelClass);
  }

  /**
   * 저장된 모델을 clear
   * - 실제로는 BlankModel 로 해당 key 에 덮어 쓰기한다.
   * - 다음에 같은 key 로 요청(getModel())되면 새로운 모델이 생성된다.
   *
   * @param activity   FragmentActivity
   * @param modelClass MainModel.class
   */
  public static void clearModel(FragmentActivity activity, Class<? extends Model> modelClass) {
    Log.e("APP#  ModelProvider | clearModel", "|" + modelClass.getCanonicalName());
    Model model = getModel(activity, modelClass);
    model.onCleared();

    // 다음 modelClass 를 요청하면 재생성되도록 빈 모델로 채워둔다.
    ViewModelProviders.of(activity).get(modelClass.getCanonicalName(), BlankModel.class);
  }
}
