# 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_M_API = '23'

BASE = os.path.join(utils.THIRD_PARTY, 'youtube')

V17_19_BASE = os.path.join(BASE, 'youtube.android_17.19')
V17_19_PREFIX = os.path.join(V17_19_BASE, 'YouTubeRelease')

LATEST_VERSION = '17.19'

VERSIONS = {
    '17.19': {
        'deploy': {
            'sanitize_libraries': False,
            'inputs': ['%s_deploy.jar' % V17_19_PREFIX],
            'libraries': [
                os.path.join(
                    V17_19_BASE,
                    'legacy_YouTubeRelease_combined_library_jars_filtered.jar')
            ],
            'pgconf': [
                '%s_proguard.config' % V17_19_PREFIX,
                '%s_proguard_extra.config' % V17_19_PREFIX,
                '%s/proguardsettings/YouTubeRelease_proguard.config' %
                utils.THIRD_PARTY, utils.IGNORE_WARNINGS_RULES
            ],
            'min-api': ANDROID_M_API,
            'system-properties': [
                # TODO(b/235169948): Reenable -checkenumunboxed.
                # '-Dcom.android.tools.r8.experimental.enablecheckenumunboxed=1',
                '-Dcom.android.tools.r8.experimental.enableconvertchecknotnull=1'
            ],
            'android_java8_libs': {
                'config':
                    '%s/desugar_jdk_libs/full_desugar_jdk_libs.json' %
                    V17_19_BASE,
                # Intentionally not adding desugar_jdk_libs_configuration.jar since it
                # is part of jdk_libs_to_desugar.jar in YouTube 17.19.
                'program': [
                    '%s/desugar_jdk_libs/jdk_libs_to_desugar.jar' % V17_19_BASE
                ],
                'library':
                    '%s/android_jar/lib-v33/android.jar' % utils.THIRD_PARTY,
                'pgconf': [
                    '%s/desugar_jdk_libs/base.pgcfg' % V17_19_BASE,
                    '%s/desugar_jdk_libs/minify_desugar_jdk_libs.pgcfg' %
                    V17_19_BASE
                ]
            }
        },
    },
}


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,
    }
