// Copyright 2019 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 '../base/common.dart';
import '../base/file_system.dart';
import '../base/platform.dart';
import '../build_info.dart';
import '../cache.dart';
import '../fuchsia/fuchsia_build.dart';
import '../project.dart';
import '../runner/flutter_command.dart' show FlutterCommandResult;
import 'build.dart';

/// A command to build a Fuchsia target.
class BuildFuchsiaCommand extends BuildSubCommand {
  BuildFuchsiaCommand({bool verboseHelp = false}) {
    usesTargetOption();
    addBuildModeFlags(verboseHelp: verboseHelp);
  }

  @override
  final String name = 'fuchsia';

  @override
  bool isExperimental = true;

  @override
  bool hidden = true;

  @override
  Future<Set<DevelopmentArtifact>> get requiredArtifacts async => <DevelopmentArtifact>{
    DevelopmentArtifact.fuchsia,
    DevelopmentArtifact.universal,
  };

  @override
  String get description => 'build the Fuchsia target (Experimental).';

  @override
  Future<FlutterCommandResult> runCommand() async {
    Cache.releaseLockEarly();
    final BuildInfo buildInfo = getBuildInfo();
    final FlutterProject flutterProject = FlutterProject.current();
    if (!platform.isLinux && !platform.isMacOS) {
      throwToolExit('"build Fuchsia" only supported on Linux and MacOS hosts.');
    }
    if (!flutterProject.fuchsia.existsSync()) {
      throwToolExit('No Fuchsia project configured.');
    }
    final String appName = flutterProject.fuchsia.project.manifest.appName;
    final String cmxPath = fs.path.join(
        flutterProject.fuchsia.meta.path, '$appName.cmx');
    final File cmxFile = fs.file(cmxPath);
    if (!cmxFile.existsSync()) {
      throwToolExit('Fuchsia build requires a .cmx file at $cmxPath for the app');
    }
    await buildFuchsia(
        fuchsiaProject: flutterProject.fuchsia,
        target: targetFile,
        buildInfo: buildInfo);
    return null;
  }
}
