# 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 glob
import os
import utils

THIRD_PARTY = os.path.join(utils.REPO_ROOT, 'third_party')
BASE = os.path.join(THIRD_PARTY, 'gmscore')

V4_BASE = os.path.join(BASE, 'v4')
V5_BASE = os.path.join(BASE, 'v5')
V6_BASE = os.path.join(BASE, 'v6')
V7_BASE = os.path.join(BASE, 'v7')
V8_BASE = os.path.join(BASE, 'v8')

V9_BASE = os.path.join(BASE, 'gmscore_v9')
V9_PREFIX = os.path.join(V9_BASE, 'GmsCore_prod_alldpi_release_all_locales')

V10_BASE = os.path.join(BASE, 'gmscore_v10')
V10_PREFIX = os.path.join(V10_BASE, 'GmsCore_prod_alldpi_release_all_locales')

LATEST_BASE = os.path.join(BASE, 'latest')
LATEST_PREFIX = os.path.join(LATEST_BASE, 'GmsCore_prod_alldpi_release_all_locales')
ANDROID_L_API = '21'

# NOTE: we always use android.jar for SDK v25, later we might want to revise it
#       to use proper android.jar version for each of gmscore version separately.
ANDROID_JAR = os.path.join(THIRD_PARTY, 'android_jar', 'lib-v25', 'android.jar')

VERSIONS = {
  'v4': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V4_BASE, '*.dex')),
      'pgmap' : os.path.join(V4_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    }
  },
  'v5': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V5_BASE, '*.dex')),
      'pgmap' : os.path.join(V5_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    }
  },
  'v6': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V6_BASE, '*.dex')),
      'pgmap' : os.path.join(V6_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    }
  },
  'v7': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V7_BASE, '*.dex')),
      'pgmap' : os.path.join(V7_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    }
  },
  'v8': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V8_BASE, '*.dex')),
      'pgmap' : os.path.join(V8_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    }
  },
  'v9': {
    'dex' : {
      'inputs': [os.path.join(V9_BASE, 'armv7_GmsCore_prod_alldpi_release.apk')],
      'pgmap': '%s_proguard.map' % V9_PREFIX,
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    },
    'deploy' : {
      'pgconf': ['%s_proguard.config' % V9_PREFIX],
      'inputs': ['%s_deploy.jar' % V9_PREFIX],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'inputs': ['%s_proguard.jar' % V9_PREFIX],
      'main-dex-list': os.path.join(V9_BASE, 'main_dex_list.txt'),
      'pgmap': '%s_proguard.map' % V9_PREFIX,
      'min-api' : ANDROID_L_API,
     }
  },
  'v10': {
    'dex' : {
      'inputs': [os.path.join(V10_BASE, 'armv7_GmsCore_prod_alldpi_release.apk')],
      'pgmap': '%s_proguard.map' % V10_PREFIX,
      'libraries' : [ANDROID_JAR],
      'r8-flags': '--ignore-missing-classes',
      'min-api' : ANDROID_L_API,
    },
    'deploy' : {
      'inputs': ['%s_deploy.jar' % V10_PREFIX],
      'pgconf': ['%s_proguard.config' % V10_PREFIX],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'inputs': ['%s_proguard.jar' % V10_PREFIX],
      'main-dex-list': os.path.join(V10_BASE, 'main_dex_list.txt') ,
      'pgmap': '%s_proguard.map' % V10_PREFIX,
      'min-api' : ANDROID_L_API,
    }
  },
  'latest': {
    'deploy' : {
      'inputs': ['%s_deploy.jar' % LATEST_PREFIX],
      'pgconf': [
          '%s_proguard.config' % LATEST_PREFIX,
          '%s/proguardsettings/GmsCore_proguard.config' % THIRD_PARTY],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'inputs': ['%s_proguard.jar' % LATEST_PREFIX],
      'main-dex-list': os.path.join(LATEST_BASE, 'main_dex_list.txt') ,
      'pgmap': '%s_proguard.map' % LATEST_PREFIX,
      'min-api' : ANDROID_L_API,
    }
  },
}
