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

from recipe_engine import recipe_api


class AutogardenerApi(recipe_api.RecipeApi):
    """APIs for interacting with the automatic gardener."""

    def find_culprits(self, build_ids):
        """Given IDs of failed buildbucket builds, run culprit analysis.

        Args:
            build_ids (seq of int): List of failing build IDs.

        Returns: A markdown-formatting string containing a ranking of potential
        culprit changes.
        """
        cmd = [
            self._autogardener_tool,
            "culprit",
            "-json-output",
            self.m.json.output(),
        ]
        cmd.extend(build_ids)
        return self.m.step(
            "find culprits",
            cmd,
            step_test_data=lambda: self.m.json.test_api.output(
                {"markdown_output": "1. foo\n2. bar"}
            ),
        ).json.output["markdown_output"]

    @property
    def _autogardener_tool(self):
        return self.m.ensure_tool("autogardener", self.resource("tool_manifest.json"))
