// Copyright 2015 The Chromium Authors. 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 'package:path/path.dart' as path;

import 'artifacts.dart';
import 'base/process.dart';
import 'build_configuration.dart';

class Compiler {
  Compiler(this._path);

  String _path;

  Future<int> compile({
    String mainPath,
    String snapshotPath,
    String depfilePath,
    String buildOutputPath
  }) {
    final List<String> args = [
      _path,
      mainPath,
      '--package-root=${ArtifactStore.packageRoot}',
      '--snapshot=$snapshotPath'
    ];
    if (depfilePath != null) {
      args.add('--depfile=$depfilePath');
    }
    if (buildOutputPath != null) {
      args.add('--build-output=$buildOutputPath');
    }
    return runCommandAndStreamOutput(args);
  }
}

Future<String> _getCompilerPath(BuildConfiguration config) async {
  if (config.type != BuildType.prebuilt) {
    String compilerPath = path.join(config.buildDir, 'clang_x64', 'sky_snapshot');
    if (FileSystemEntity.isFileSync(compilerPath))
      return compilerPath;
    compilerPath = path.join(config.buildDir, 'sky_snapshot');
    if (FileSystemEntity.isFileSync(compilerPath))
      return compilerPath;
    return null;
  }
  Artifact artifact = ArtifactStore.getArtifact(
    type: ArtifactType.snapshot, hostPlatform: config.hostPlatform);
  return await ArtifactStore.getPath(artifact);
}

class Toolchain {
  Toolchain({ this.compiler });

  final Compiler compiler;

  static Future<Toolchain> forConfigs(List<BuildConfiguration> configs) async {
    for (BuildConfiguration config in configs) {
      String compilerPath = await _getCompilerPath(config);
      if (compilerPath != null)
        return new Toolchain(compiler: new Compiler(compilerPath));
    }
    return null;
  }
}
