#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2019 The ChromiumOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""A custom script example that utilizes the .JSON contents of the tryjob."""

from __future__ import print_function

import json
import sys

from update_tryjob_status import TryjobStatus


def main():
  """Determines the exit code based off of the contents of the .JSON file."""

  # Index 1 in 'sys.argv' is the path to the .JSON file which contains
  # the contents of the tryjob.
  #
  # Format of the tryjob contents:
  #   {
  #     "status" : [TRYJOB_STATUS],
  #     "buildbucket_id" : [BUILDBUCKET_ID],
  #     "extra_cls" : [A_LIST_OF_EXTRA_CLS_PASSED_TO_TRYJOB],
  #     "url" : [GERRIT_URL],
  #     "builder" : [TRYJOB_BUILDER_LIST],
  #     "rev" : [REVISION],
  #     "link" : [LINK_TO_TRYJOB],
  #     "options" : [A_LIST_OF_OPTIONS_PASSED_TO_TRYJOB]
  #   }
  abs_path_json_file = sys.argv[1]

  with open(abs_path_json_file) as f:
    tryjob_contents = json.load(f)

  CUTOFF_PENDING_REVISION = 369416

  SKIP_REVISION_CUTOFF_START = 369420
  SKIP_REVISION_CUTOFF_END = 369428

  if tryjob_contents['status'] == TryjobStatus.PENDING.value:
    if tryjob_contents['rev'] <= CUTOFF_PENDING_REVISION:
      # Exit code 0 means to set the tryjob 'status' as 'good'.
      sys.exit(0)

    # Exit code 124 means to set the tryjob 'status' as 'bad'.
    sys.exit(124)

  if tryjob_contents['status'] == TryjobStatus.BAD.value:
    # Need to take a closer look at the contents of the tryjob to then decide
    # what that tryjob's 'status' value should be.
    #
    # Since the exit code is not in the mapping, an exception will occur which
    # will save the file in the directory of this custom script example.
    sys.exit(1)

  if tryjob_contents['status'] == TryjobStatus.SKIP.value:
    # Validate that the 'skip value is really set between the cutoffs.
    if SKIP_REVISION_CUTOFF_START < tryjob_contents['rev'] < \
        SKIP_REVISION_CUTOFF_END:
      # Exit code 125 means to set the tryjob 'status' as 'skip'.
      sys.exit(125)

    if tryjob_contents['rev'] >= SKIP_REVISION_CUTOFF_END:
      sys.exit(124)


if __name__ == '__main__':
  main()
