// Copyright 2018 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:core';

import 'package:flutter_driver/flutter_driver.dart';
import 'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart';
import 'package:fuchsia_remote_debug_protocol/logging.dart';

/// Runs through a simple usage of the fuchsia_remote_debug_protocol library:
/// connects to a remote machine at the address in argument 1 (interface
/// optional for argument 2) to drive an application named 'todo_list' by
/// scrolling up and down on the main scaffold.
///
/// Make sure to set up your application (you can change the name from
/// 'todo_list') follows the setup for testing with the flutter driver:
/// https://flutter.dev/testing/#adding-the-flutter_driver-dependency
///
/// Example usage:
///
/// $ dart examples/driver_todo_list_scroll.dart \
///     fe80::8eae:4cff:fef4:9247 eno1
Future<void> main(List<String> args) async {
  // Log only at info level within the library. If issues arise, this can be
  // changed to [LoggingLevel.all] or [LoggingLevel.fine] to see more
  // information.
  Logger.globalLevel = LoggingLevel.info;
  if (args.isEmpty) {
    print('Expects an IP address and/or network interface');
    return;
  }
  final String address = args[0];
  final String interface = args.length > 1 ? args[1] : '';
  // Example ssh config path for the Fuchsia device after having made a local
  // build.
  const String sshConfigPath =
      '../../../fuchsia/out/x64rel/ssh-keys/ssh_config';
  final FuchsiaRemoteConnection connection =
      await FuchsiaRemoteConnection.connect(address, interface, sshConfigPath);

  const Pattern isolatePattern = 'todo_list';
  print('Finding $isolatePattern');
  final List<IsolateRef> refs =
      await connection.getMainIsolatesByPattern(isolatePattern);

  final IsolateRef ref = refs.first;
  print('Driving ${ref.name}');
  final FlutterDriver driver = await FlutterDriver.connect(
      dartVmServiceUrl: ref.dartVm.uri.toString(),
      isolateNumber: ref.number,
      printCommunication: true,
      logCommunicationToFile: false);
  for (int i = 0; i < 5; ++i) {
    // Scrolls down 300px.
    await driver.scroll(find.byType('Scaffold'), 0.0, -300.0,
        const Duration(milliseconds: 300));
    await Future<void>.delayed(const Duration(milliseconds: 500));
    // Scrolls up 300px.
    await driver.scroll(find.byType('Scaffold'), 300.0, 300.0,
        const Duration(milliseconds: 300));
  }
  await driver.close();
  await connection.stop();
}
