#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 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.

"""Chroot helper functions."""

from __future__ import print_function

import os
import subprocess
import collections

CommitContents = collections.namedtuple('CommitContents', ['url', 'cl_number'])


def InChroot():
  """Returns True if currently in the chroot."""
  return 'CROS_WORKON_SRCROOT' in os.environ


def VerifyOutsideChroot():
  """Checks whether the script invoked was executed in the chroot.

  Raises:
    AssertionError: The script was run inside the chroot.
  """

  assert not InChroot(), 'Script should be run outside the chroot.'


def GetChrootEbuildPaths(chromeos_root, packages):
  """Gets the chroot path(s) of the package(s).

  Args:
    chromeos_root: The absolute path to the chroot to
    use for executing chroot commands.
    packages: A list of a package/packages to
    be used to find their chroot path.

  Returns:
    A list of chroot paths of the packages' ebuild files.

  Raises:
    ValueError: Failed to get the chroot path of a package.
  """

  chroot_paths = []

  # Find the chroot path for each package's ebuild.
  for package in sorted(set(packages)):
    chroot_path = subprocess.check_output(
        ['cros_sdk', '--', 'equery', 'w', package],
        cwd=chromeos_root,
        encoding='utf-8')
    chroot_paths.append(chroot_path.strip())

  return chroot_paths


def ConvertChrootPathsToAbsolutePaths(chromeos_root, chroot_paths):
  """Converts the chroot path(s) to absolute symlink path(s).

  Args:
    chromeos_root: The absolute path to the chroot.
    chroot_paths: A list of chroot paths to convert to absolute paths.

  Returns:
    A list of absolute path(s).

  Raises:
    ValueError: Invalid prefix for the chroot path or
    invalid chroot paths were provided.
  """

  abs_paths = []

  chroot_prefix = '/mnt/host/source/'

  # Iterate through the chroot paths.
  #
  # For each chroot file path, remove '/mnt/host/source/' prefix
  # and combine the chroot path with the result and add it to the list.
  for chroot_path in chroot_paths:
    if not chroot_path.startswith(chroot_prefix):
      raise ValueError('Invalid prefix for the chroot path: %s' % chroot_path)

    rel_path = chroot_path[len(chroot_prefix):]

    # combine the chromeos root path + '/src/...'
    abs_path = os.path.join(chromeos_root, rel_path)

    abs_paths.append(abs_path)

  return abs_paths
