# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

import os
import utils

ANDROID_H_MR2_API = '13'
ANDROID_L_API = '21'
BASE = os.path.join(utils.THIRD_PARTY, 'youtube')

V15_33_BASE = os.path.join(BASE, 'youtube.android_15.33')
V15_33_PREFIX = os.path.join(V15_33_BASE, 'YouTubeRelease')

V16_20_BASE = os.path.join(BASE, 'youtube.android_16.20')
V16_20_PREFIX = os.path.join(V16_20_BASE, 'YouTubeRelease')

LATEST_VERSION = '16.20'

VERSIONS = {
  '15.33': {
    'dex' : {
      'inputs': [os.path.join(V15_33_BASE, 'YouTubeRelease_unsigned.apk')],
      'pgmap': '%s_proguard.map' % V15_33_PREFIX,
      'libraries' : [utils.get_android_jar(25)],
      'min-api' : ANDROID_L_API,
    },
    'deploy' : {
      # When -injars and -libraryjars are used for specifying inputs library
      # sanitization is on by default. For this version of YouTube -injars and
      # -libraryjars are not used, but library sanitization is still required.
      'sanitize_libraries': True,
      'inputs': ['%s_deploy.jar' % V15_33_PREFIX],
      'libraries' : [os.path.join(V15_33_BASE, 'legacy_YouTubeRelease_combined_library_jars.jar')],
      'pgconf': [
          '%s_proguard.config' % V15_33_PREFIX,
          '%s_proguard_missing_classes.config' % V15_33_PREFIX,
          '%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY,
          utils.IGNORE_WARNINGS_RULES],
      'maindexrules' : [
          os.path.join(V15_33_BASE, 'mainDexClasses.rules'),
          os.path.join(V15_33_BASE, 'main-dex-classes-release-optimized.pgcfg'),
          os.path.join(V15_33_BASE, 'main_dex_YouTubeRelease_proguard.cfg')],
      'min-api' : ANDROID_H_MR2_API,
    },
    'proguarded' : {
      'inputs': ['%s_proguard.jar' % V15_33_PREFIX],
      'pgmap': '%s_proguard.map' % V15_33_PREFIX,
      'min-api' : ANDROID_L_API,
    }
  },
  '16.20': {
    'deploy' : {
      'sanitize_libraries': False,
      'inputs': ['%s_deploy.jar' % V16_20_PREFIX],
      'libraries' : [
          os.path.join(
              V16_20_BASE,
              'legacy_YouTubeRelease_combined_library_jars_filtered.jar')],
      'pgconf': [
          '%s_proguard.config' % V16_20_PREFIX,
          '%s/proguardsettings/YouTubeRelease_proguard.config' % utils.THIRD_PARTY,
          utils.IGNORE_WARNINGS_RULES],
      'min-api' : ANDROID_L_API,
      'android_java8_libs': {
        'config': '%s/desugar_jdk_libs/full_desugar_jdk_libs.json' % V16_20_BASE,
        # Intentionally not adding desugar_jdk_libs_configuration.jar since it
        # is part of jdk_libs_to_desugar.jar in YouTube 16.20.
        'program': ['%s/desugar_jdk_libs/jdk_libs_to_desugar.jar' % V16_20_BASE],
        'library': '%s/android_jar/lib-v30/android.jar' % utils.THIRD_PARTY,
        'pgconf': [
          '%s/desugar_jdk_libs/base.pgcfg' % V16_20_BASE,
          '%s/desugar_jdk_libs/minify_desugar_jdk_libs.pgcfg' % V16_20_BASE
        ]
      }
    },
    'proguarded' : {
      'inputs': ['%s_proguard.jar' % V16_20_PREFIX],
      'pgmap': '%s_proguard.map' % V16_20_PREFIX,
      'min-api' : ANDROID_L_API,
    }
  },
}

def GetLatestVersion():
  return LATEST_VERSION

def GetName():
  return 'youtube'

def GetMemoryData(version):
  assert version == '16.20'
  return {
      'find-xmx-min': 3150,
      'find-xmx-max': 3300,
      'find-xmx-range': 64,
      'oom-threshold': 3100,
      # TODO(b/143431825): Youtube can OOM randomly in memory configurations
      #  that should work.
      'skip-find-xmx-max': True,
  }
