package com.example.fragnums;

import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseArray;
import android.view.View;

public class BackstackFrame implements Parcelable {

  public final static Creator<BackstackFrame> CREATOR = new Creator<BackstackFrame>() {
    @Override public BackstackFrame createFromParcel(Parcel source) {
      Screen screen = Screen.values()[source.readInt()];
      Bundle bundle = source.readBundle();
      SparseArray<Parcelable> viewState = bundle.getSparseParcelableArray("viewState");
      return new BackstackFrame(screen, viewState);
    }

    @Override public BackstackFrame[] newArray(int size) {
      return new BackstackFrame[size];
    }
  };

  public final Screen screen;

  private final SparseArray<Parcelable> viewState;

  private BackstackFrame(Screen screen, SparseArray<Parcelable> viewState) {
    this.screen = screen;
    this.viewState = viewState;
  }

  public BackstackFrame(Screen screen, View view) {
    this.screen = screen;
    viewState = new SparseArray<>();
    view.saveHierarchyState(viewState);
  }

  public void restore(View view) {
    view.restoreHierarchyState(viewState);
  }

  @Override public int describeContents() {
    return 0;
  }

  @Override public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(screen.ordinal());
    Bundle bundle = new Bundle();
    bundle.putSparseParcelableArray("viewState", viewState);
    dest.writeBundle(bundle);
  }
}