// Copyright 2023 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.analysis.producers;

import com.google.devtools.build.lib.analysis.PlatformConfiguration;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
import com.google.devtools.build.lib.analysis.ToolchainCollection;
import com.google.devtools.build.lib.analysis.config.ConfigConditions;
import com.google.devtools.build.lib.analysis.constraints.IncompatibleTargetChecker.IncompatibleTargetException;
import com.google.devtools.build.lib.analysis.constraints.IncompatibleTargetChecker.IncompatibleTargetProducer;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper.ValidationException;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.skyframe.ConfiguredValueCreationException;
import com.google.devtools.build.lib.skyframe.RuleConfiguredTargetValue;
import com.google.devtools.build.lib.skyframe.toolchains.PlatformLookupUtil.InvalidPlatformException;
import com.google.devtools.build.lib.skyframe.toolchains.ToolchainException;
import com.google.devtools.build.lib.skyframe.toolchains.UnloadedToolchainContext;
import com.google.devtools.build.skyframe.state.StateMachine;
import java.util.Optional;
import javax.annotation.Nullable;

/**
 * Computes the {@link DependencyContext} while checking for platform compatibility.
 *
 * <p>See <a href="https://bazel.build/extending/platforms#skipping-incompatible-targets">Skipping
 * Incompatible Targets</a> for more details on platform compatibility.
 */
// TODO(b/278878321): unify this and DependencyContextProducer.
public final class DependencyContextProducerWithCompatibilityCheck
    implements StateMachine,
        PlatformInfoProducer.ResultSink,
        ConfigConditionsProducer.ResultSink,
        IncompatibleTargetProducer.ResultSink,
        UnloadedToolchainContextsProducer.ResultSink {
  // -------------------- Input --------------------
  private final TargetAndConfiguration targetAndConfiguration;
  private final UnloadedToolchainContextsInputs unloadedToolchainContextsInputs;

  private final TransitiveDependencyState transitiveState;

  // -------------------- Output --------------------
  private final DependencyContextProducer.ResultSink sink;

  // -------------------- Internal State --------------------
  private PlatformInfo targetPlatformInfo;
  private ConfigConditions configConditions;
  @Nullable // Will be null if the target doesn't require toolchain resolution.
  private ToolchainCollection<UnloadedToolchainContext> unloadedToolchainContexts;
  private boolean hasError = false;

  public DependencyContextProducerWithCompatibilityCheck(
      TargetAndConfiguration targetAndConfiguration,
      UnloadedToolchainContextsInputs unloadedToolchainContextsInputs,
      TransitiveDependencyState transitiveState,
      DependencyContextProducer.ResultSink sink) {
    this.targetAndConfiguration = targetAndConfiguration;
    this.unloadedToolchainContextsInputs = unloadedToolchainContextsInputs;
    this.transitiveState = transitiveState;
    this.sink = sink;
  }

  @Override
  public StateMachine step(Tasks tasks, ExtendedEventHandler listener) {
    var defaultToolchainContextKey = unloadedToolchainContextsInputs.targetToolchainContextKey();
    if (defaultToolchainContextKey == null) {
      // If `defaultToolchainContextKey` is null, there's no platform info, incompatibility check
      // or toolchain resolution. Short-circuits and computes only the ConfigConditions.
      return new ConfigConditionsProducer(
          targetAndConfiguration,
          /* targetPlatformInfo= */ null,
          transitiveState,
          (ConfigConditionsProducer.ResultSink) this,
          /* runAfter= */ this::constructResult);
    }

    // Non-null `defaultToolchainContextKey` guarantees that `platformConfiguration` is non-null.
    var platformConfiguration =
        targetAndConfiguration.getConfiguration().getFragment(PlatformConfiguration.class);
    // Checks for incompatibility before toolchain resolution so that known missing
    // toolchains mark the target incompatible instead of failing the build.
    return new PlatformInfoProducer(
        ConfiguredTargetKey.builder()
            .setLabel(platformConfiguration.getTargetPlatform())
            .setConfigurationKey(defaultToolchainContextKey.configurationKey())
            .build(),
        (PlatformInfoProducer.ResultSink) this,
        /* runAfter= */ this::computeConfigConditions);
  }

  @Override
  public void acceptPlatformInfo(PlatformInfo info) {
    this.targetPlatformInfo = info;
  }

  @Override
  public void acceptPlatformInfoError(InvalidPlatformException error) {
    this.hasError = true;
    sink.acceptDependencyContextError(DependencyContextError.of(error));
  }

  private StateMachine computeConfigConditions(Tasks tasks, ExtendedEventHandler listener) {
    if (hasError) {
      return DONE;
    }

    return new ConfigConditionsProducer(
        targetAndConfiguration,
        targetPlatformInfo,
        transitiveState,
        (ConfigConditionsProducer.ResultSink) this,
        /* runAfter= */ this::checkCompatibility);
  }

  // -------------------- ConfigConditionsProducer.ResultSink --------------------
  @Override
  public void acceptConfigConditions(ConfigConditions configConditions) {
    this.configConditions = configConditions;
  }

  @Override
  public void acceptConfigConditionsError(ConfiguredValueCreationException error) {
    this.hasError = true;
    sink.acceptDependencyContextError(DependencyContextError.of(error));
  }

  private StateMachine checkCompatibility(Tasks tasks, ExtendedEventHandler listener) {
    if (hasError) {
      return DONE;
    }

    return new IncompatibleTargetProducer(
        targetAndConfiguration.getTarget(),
        targetAndConfiguration.getConfiguration(),
        configConditions,
        targetPlatformInfo,
        transitiveState.transitivePackages(),
        (IncompatibleTargetProducer.ResultSink) this,
        /* runAfter= */ this::computeUnloadedToolchainContexts);
  }

  @Override
  public void acceptIncompatibleTarget(Optional<RuleConfiguredTargetValue> incompatibleTarget) {
    if (!incompatibleTarget.isEmpty()) {
      this.hasError = true;
      sink.acceptDependencyContextError(
          DependencyContextError.of(new IncompatibleTargetException(incompatibleTarget.get())));
    }
  }

  @Override
  public void acceptValidationException(ValidationException e) {
    this.hasError = true;
    sink.acceptDependencyContextError(DependencyContextError.of(e));
  }

  private StateMachine computeUnloadedToolchainContexts(
      Tasks tasks, ExtendedEventHandler listener) {
    if (hasError) {
      return DONE;
    }

    return new UnloadedToolchainContextsProducer(
        unloadedToolchainContextsInputs,
        (UnloadedToolchainContextsProducer.ResultSink) this,
        /* runAfter= */ this::constructResult);
  }

  @Override
  public void acceptUnloadedToolchainContexts(
      @Nullable ToolchainCollection<UnloadedToolchainContext> unloadedToolchainContexts) {
    this.unloadedToolchainContexts = unloadedToolchainContexts;
  }

  @Override
  public void acceptUnloadedToolchainContextsError(ToolchainException error) {
    this.hasError = true;
    sink.acceptDependencyContextError(DependencyContextError.of(error));
  }

  private StateMachine constructResult(Tasks tasks, ExtendedEventHandler listener) {
    if (hasError) {
      return DONE;
    }

    sink.acceptDependencyContext(
        DependencyContext.create(unloadedToolchainContexts, configConditions));
    return DONE;
  }
}
