// Copyright 2013 The Flutter 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 io.flutter.plugin.common;

import android.util.Log;
import androidx.annotation.Nullable;
import io.flutter.BuildConfig;

/**
 * An implementation of {@link MethodChannel.Result} that writes error results to the Android log.
 */
public class ErrorLogResult implements MethodChannel.Result {
  private String tag;
  private int level;

  public ErrorLogResult(String tag) {
    this(tag, Log.WARN);
  }

  public ErrorLogResult(String tag, int level) {
    this.tag = tag;
    this.level = level;
  }

  @Override
  public void success(@Nullable Object result) {}

  @Override
  public void error(
      String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) {
    String details = (errorDetails != null) ? " details: " + errorDetails : "";
    if (level >= Log.WARN || BuildConfig.DEBUG) {
      Log.println(level, tag, errorMessage + details);
    }
  }

  @Override
  public void notImplemented() {
    if (level >= Log.WARN || BuildConfig.DEBUG) {
      Log.println(level, tag, "method not implemented");
    }
  }
}
