// Copyright 2024 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.dynamic;

import com.google.devtools.build.lib.actions.DynamicStrategyRegistry.DynamicMode;
import com.google.devtools.build.lib.events.ExtendedEventHandler.Postable;

/** Event transporting the data about winner in dynamic execution race. */
public final class DynamicExecutionFinishedEvent implements Postable {
  private final String mnemonic;
  private final String localBranchName;
  private final String remoteBranchName;

  private final DynamicMode winnerBranchType;

  public DynamicExecutionFinishedEvent(
      String mnemonic,
      String localBranchName,
      String winnerBranchName,
      DynamicMode winnerBranchType) {
    this.mnemonic = mnemonic;
    this.localBranchName = localBranchName;
    this.remoteBranchName = winnerBranchName;
    this.winnerBranchType = winnerBranchType;
  }

  public String getMnemonic() {
    return mnemonic;
  }

  public String getLocalBranchName() {
    return localBranchName;
  }

  public String getRemoteBranchName() {
    return remoteBranchName;
  }

  public DynamicMode getWinnerBranchType() {
    return winnerBranchType;
  }
}
