# 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

BASE = os.path.join(utils.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 = utils.get_android_jar(25)

VERSIONS = {
  'v4': {
    'dex' : {
      'inputs' : glob.glob(os.path.join(V4_BASE, '*.dex')),
      'pgmap' : os.path.join(V4_BASE, 'proguard.map'),
      'libraries' : [ANDROID_JAR],
      '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],
      '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],
      '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],
      '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],
      'min-api' : ANDROID_L_API,
    }
  },
  'v9': {
    'dex' : {
      'flags': '--no-desugaring',
      'inputs': [os.path.join(V9_BASE, 'armv7_GmsCore_prod_alldpi_release.apk')],
      'main-dex-list': os.path.join(V9_BASE, 'main_dex_list.txt'),
      'pgmap': '%s_proguard.map' % V9_PREFIX,
    },
    'deploy' : {
      'pgconf': ['%s_proguard.config' % V9_PREFIX,
                 utils.IGNORE_WARNINGS_RULES],
      'inputs': ['%s_deploy.jar' % V9_PREFIX],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'flags': '--no-desugaring',
      'inputs': ['%s_proguard.jar' % V9_PREFIX],
      'main-dex-list': os.path.join(V9_BASE, 'main_dex_list.txt'),
      'pgmap': '%s_proguard.map' % V9_PREFIX,
     }
  },
  'v10': {
    'dex' : {
      'flags': '--no-desugaring',
      'inputs': [os.path.join(V10_BASE, 'armv7_GmsCore_prod_alldpi_release.apk')],
      'main-dex-list': os.path.join(V10_BASE, 'main_dex_list.txt') ,
      'pgmap': '%s_proguard.map' % V10_PREFIX,
    },
    'deploy' : {
      'inputs': ['%s_deploy.jar' % V10_PREFIX],
      'pgconf': ['%s_proguard.config' % V10_PREFIX,
                 utils.IGNORE_WARNINGS_RULES],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'flags': '--no-desugaring',
      'inputs': ['%s_proguard.jar' % V10_PREFIX],
      'main-dex-list': os.path.join(V10_BASE, 'main_dex_list.txt') ,
      'pgmap': '%s_proguard.map' % V10_PREFIX,
    }
  },
  'latest': {
    'deploy' : {
      'inputs': ['%s_deploy.jar' % LATEST_PREFIX],
      'pgconf': [
          '%s_proguard.config' % LATEST_PREFIX,
          '%s/proguardsettings/GmsCore_proguard.config' % utils.THIRD_PARTY,
          utils.IGNORE_WARNINGS_RULES],
      'min-api' : ANDROID_L_API,
    },
    'proguarded' : {
      'flags': '--no-desugaring',
      'inputs': ['%s_proguard.jar' % LATEST_PREFIX],
      'main-dex-list': os.path.join(LATEST_BASE, 'main_dex_list.txt') ,
      'pgmap': '%s_proguard.map' % LATEST_PREFIX,
    }
  },
}
