// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package androidx.test.espresso.flutter.api;

import static androidx.test.espresso.flutter.common.Constants.DEFAULT_INTERACTION_TIMEOUT;
import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.annotations.Beta;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.Objects;
import javax.annotation.Nonnull;

/**
 * Base Flutter synthetic action.
 *
 * <p>A synthetic action is not a real gesture event issued to the Android system, rather it's an
 * action that's performed via Flutter engine. It's supposed to be used for complex interactions or
 * those that are brittle if performed through Android system. Most of the actions should be
 * associated with a {@link WidgetMatcher}, but some may not, e.g. an action that checks the
 * rendering status of the entire {@link io.flutter.view.FlutterView}.
 */
@Beta
public abstract class SyntheticAction {

  @Expose
  @SerializedName("command")
  protected String actionId;

  @Expose
  @SerializedName("timeout")
  protected long timeOutInMillis;

  protected SyntheticAction(@Nonnull String actionId) {
    this(actionId, DEFAULT_INTERACTION_TIMEOUT.toMillis());
  }

  protected SyntheticAction(@Nonnull String actionId, long timeOutInMillis) {
    this.actionId = checkNotNull(actionId);
    this.timeOutInMillis = timeOutInMillis;
  }

  @Override
  public String toString() {
    return actionId;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    } else if (obj instanceof SyntheticAction) {
      SyntheticAction otherAction = (SyntheticAction) obj;
      return Objects.equals(actionId, otherAction.actionId);
    } else {
      return false;
    }
  }

  @Override
  public int hashCode() {
    return Objects.hashCode(actionId);
  }
}
