#!/usr/bin/env python3
# Copyright (c) 2018, the Dart 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 optparse
import os
import subprocess
import sys
import shutil
import tempfile

PUBSPEC = """name: pub_integration_test
environment:
  sdk: '>=2.10.0 <=3.0.0'
dependencies:
  shelf:
  test:
"""


def Main():
    parser = optparse.OptionParser()
    parser.add_option(
        '--mode', action='store', dest='mode', type='string', default='release')
    parser.add_option('--arch',
                      action='store',
                      dest='arch',
                      type='string',
                      default='x64')

    (options, args) = parser.parse_args()

    arch = 'ARM64' if options.arch == 'arm64' else 'X64'
    mode = ('Debug' if options.mode == 'debug' else 'Release')

    out_dir = 'xcodebuild' if sys.platform == 'darwin' else 'out'
    extension = '' if not sys.platform == 'win32' else '.bat'
    pub = os.path.abspath('%s/%s%s/dart-sdk/bin/pub%s' %
                          (out_dir, mode, arch, extension))
    print(pub)

    working_dir = tempfile.mkdtemp()
    try:
        pub_cache_dir = working_dir + '/pub_cache'
        env = os.environ.copy()
        env['PUB_CACHE'] = pub_cache_dir

        with open(working_dir + '/pubspec.yaml', 'w') as pubspec_yaml:
            pubspec_yaml.write(PUBSPEC)

        exit_code = subprocess.call([pub, 'get'], cwd=working_dir, env=env)
        if exit_code != 0:
            return exit_code

        exit_code = subprocess.call([pub, 'upgrade'], cwd=working_dir, env=env)
        if exit_code != 0:
            return exit_code
    finally:
        shutil.rmtree(working_dir)


if __name__ == '__main__':
    sys.exit(Main())
