# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Android operations."""

from __future__ import print_function

import os

from chromite.api import faux
from chromite.api import validate
from chromite.api.controller import controller_util
from chromite.api.gen.chromite.api import android_pb2
from chromite.lib import constants
from chromite.lib import osutils
from chromite.lib.parser import package_info
from chromite.service import packages


ANDROIDPIN_MASK_PATH = os.path.join(constants.SOURCE_ROOT,
                                    constants.CHROMIUMOS_OVERLAY_DIR,
                                    'profiles', 'default', 'linux',
                                    'package.mask', 'androidpin')


def _MarkStableResponse(_input_proto, output_proto, _config):
  """Add fake status to a successful response."""
  output_proto.android_atom.category = 'category'
  output_proto.android_atom.package_name = 'android-package-name'
  output_proto.android_atom.version = '1.2'
  output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS


@faux.success(_MarkStableResponse)
@faux.empty_error
@validate.require('package_name', 'android_build_branch')
@validate.validation_complete
def MarkStable(input_proto, output_proto, _config):
  """Uprev Android, if able.

  Uprev Android, verify that the newly uprevved package can be emerged, and
  return the new package info.

  See AndroidService documentation in api/proto/android.proto.

  Args:
    input_proto (MarkStableRequest): The input proto.
    output_proto (MarkStableResponse): The output proto.
    _config (api_config.ApiConfig): The call config.
  """
  chroot = controller_util.ParseChroot(input_proto.chroot)
  build_targets = controller_util.ParseBuildTargets(input_proto.build_targets)
  tracking_branch = input_proto.tracking_branch
  package_name = input_proto.package_name
  android_build_branch = input_proto.android_build_branch
  android_version = input_proto.android_version

  # Assume success.
  output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
  # TODO(crbug/904939): This should move to service/android.py and the port
  # should be finished.
  try:
    android_atom_to_build = packages.uprev_android(
        tracking_branch=tracking_branch,
        android_package=package_name,
        android_build_branch=android_build_branch,
        chroot=chroot,
        build_targets=build_targets,
        android_version=android_version)
  except packages.AndroidIsPinnedUprevError as e:
    # If the uprev failed due to a pin, CI needs to unpin and retry.
    android_atom_to_build = e.new_android_atom
    output_proto.status = android_pb2.MARK_STABLE_STATUS_PINNED

  if android_atom_to_build:
    pkg = package_info.parse(android_atom_to_build)
    controller_util.serialize_package_info(pkg, output_proto.android_atom)
  else:
    output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT


# We don't use @faux.success for UnpinVersion because output_proto is unused.
@faux.all_empty
@validate.validation_complete
def UnpinVersion(_input_proto, _output_proto, _config):
  """Unpin the Android version.

  See AndroidService documentation in api/proto/android.proto.

  Args:
    _input_proto (UnpinVersionRequest): The input proto. (not used.)
    _output_proto (UnpinVersionResponse): The output proto. (not used.)
    _config (api_config.ApiConfig): The call config.
  """
  osutils.SafeUnlink(ANDROIDPIN_MASK_PATH)
