// Copyright 2023 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:io';

import 'package:args/command_runner.dart';
import 'package:devtools_tool/model.dart';
import 'package:io/io.dart';
import 'package:path/path.dart' as path;

import '../utils.dart';

const _upgradeFlag = 'upgrade';

class GenerateCodeCommand extends Command {
  GenerateCodeCommand() {
    argParser.addFlag(
      _upgradeFlag,
      negatable: false,
      help:
          'Run pub upgrade on the DevTools packages before performing the code generation.',
    );
  }

  @override
  String get name => 'generate-code';

  @override
  String get description =>
      'Performs code generation by running `build_runner build` for required packages.';

  @override
  Future run() async {
    final repo = DevToolsRepo.getInstance();
    final processManager = ProcessManager();

    final upgrade = argResults![_upgradeFlag] as bool;
    if (upgrade) {
      await processManager.runProcess(
        CliCommand.tool(['pub-get', '--only-main', '--upgrade']),
      );
    }

    for (final packageName in ['devtools_app', 'devtools_test']) {
      print('Running build_runner build for $packageName');
      final directoryPath = path.join(repo.repoPath, 'packages', packageName);
      await processManager.runProcess(
        CliCommand.flutter(
          [
            'pub',
            'run',
            'build_runner',
            'build',
            '--delete-conflicting-outputs',
          ],
        ),
        workingDirectory: directoryPath,
      );
    }

    print('Adding lint ignores for mocks');
    final mockFile = File(
      path.join(
        repo.repoPath,
        'packages',
        'devtools_test',
        'lib',
        'src',
        'mocks',
        'generated.mocks.dart',
      ),
    );
    var mockFileContents = mockFile.readAsStringSync();
    if (!mockFileContents.contains('require_trailing_commas')) {
      mockFileContents = mockFileContents.replaceFirst(
        '// ignore_for_file:',
        '// ignore_for_file: require_trailing_commas\n// ignore_for_file:',
      );
      mockFile.writeAsStringSync(mockFileContents);
    }
  }
}
