# Copyright 2020 The Chromium 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 contextlib import contextmanager
from recipe_engine import recipe_api


class AndroidSdkApi(recipe_api.RecipeApi):
  """Provides Android SDK environment."""

  def install(self):
    """Installs Android SDK in cache."""
    android_root = self.m.path['cache'].join('android_root')
    with self.m.step.nest('Download Android SDK Components'):
      self.m.cipd.ensure(
          android_root.join('platform-tools'),
          self.m.cipd.EnsureFile().add_package(
              'flutter/android/sdk/platform-tools/${platform}',
              'version:29.0.2',
          ),
      )
      self.m.cipd.ensure(
          android_root.join('platforms'),
          self.m.cipd.EnsureFile().add_package(
              'flutter/android/sdk/platforms',
              'version:29r1',
          ),
      )
      self.m.cipd.ensure(
          android_root.join('build-tools'),
          self.m.cipd.EnsureFile().add_package(
              'flutter/android/sdk/build-tools/${platform}',
              'version:29.0.1',
          ),
      )

    with self.m.step.nest('Android SDK Licenses'):
      self.m.file.ensure_directory('mkdir licenses',
                                   android_root.join('licenses'))
      self.m.file.write_text(
          'android sdk license',
          android_root.join('licenses', 'android-sdk-license'),
          str(self.m.properties['android_sdk_license']),
      )
      self.m.file.write_text(
          'android sdk preview license',
          android_root.join('licenses', 'android-sdk-preview-license'),
          str(self.m.properties['android_sdk_preview_license']),
      )

  @contextmanager
  def context(self):
    """Yields a context that contains Android SDK environment.

    Must call api.android_sdk.install() first.
    """
    android_root = self.m.path['cache'].join('android_root')
    with self.m.context(
        env={'ANDROID_SDK_ROOT': android_root},
        env_prefixes={'PATH': [android_root.join('platform-tools')]}):
      yield
