// Copyright 2014 The Flutter 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 '../project.dart';
import '../runner/flutter_command.dart';

class MakeHostAppEditableCommand extends FlutterCommand {
  MakeHostAppEditableCommand() {
    requiresPubspecYaml();

    argParser.addFlag(
      'ios',
      help: 'Whether to make this project\'s iOS app editable.',
      negatable: false,
    );
    argParser.addFlag(
      'android',
      help: 'Whether ot make this project\'s Android app editable.',
      negatable: false,
    );
  }

  FlutterProject _project;

  @override
  final String name = 'make-host-app-editable';

  @override
  final String description = 'Moves host apps from generated directories to non-generated directories so that they can be edited by developers.\n\n'
    'Use flags to specify which host app to make editable. If no flags are provided then all host apps will be made editable.\n\n'
    'Once a host app is made editable, that host app cannot be regenerated by Flutter and it will not receive future template changes.';

  @override
  Future<void> validateCommand() async {
    await super.validateCommand();
    _project = FlutterProject.current();
    if (!_project.isModule) {
      throw ToolExit("Only projects created using 'flutter create -t module' can have their host apps made editable.");
    }
  }

  @override
  Future<FlutterCommandResult> runCommand() async {
    await _project.ensureReadyForPlatformSpecificTooling(checkProjects: false);

    final bool isAndroidRequested = boolArg('android');
    final bool isIOSRequested = boolArg('ios');

    if (isAndroidRequested == isIOSRequested) {
      // No flags provided, or both flags provided. Make Android and iOS host
      // apps editable.
      await _project.android.makeHostAppEditable();
      await _project.ios.makeHostAppEditable();
    } else if (isAndroidRequested) {
      await _project.android.makeHostAppEditable();
    } else if (isIOSRequested) {
      await _project.ios.makeHostAppEditable();
    }

    return FlutterCommandResult.success();
  }
}
