// Copyright (c) 2017, 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 'dart:async';
import 'dart:io';

import 'repository.dart';

Future _contentShellFuture;

/// Runs "tools/get_archive.py" to download and install Content Shell.
Future updateContentShell(String drtPath) {
  if (_contentShellFuture == null) {
    _contentShellFuture =
        new _RuntimeUpdater('Content Shell', 'tools/get_archive.py', 'drt')
            .update();
  }

  return _contentShellFuture;
}

class _RuntimeUpdater {
  String _name;
  String _script;
  String _option;

  _RuntimeUpdater(this._name, this._script, [this._option]);

  Future update() async {
    try {
      print('Updating $_name...');

      var arguments = [Repository.uri.resolve(_script).toFilePath()];

      if (_option != null) arguments.add(_option);

      var result = await Process.run('python', arguments);
      if (result.exitCode == 0) {
        print('Updated $_name.');
      } else {
        print('Failed to update $_name (exit code ${result.exitCode}):');
        print(result.stdout);
        print(result.stderr);
        exit(1);
      }
    } catch (error) {
      print("Error starting $_script process: $error");
      exit(1);
    }
  }
}
