// Copyright (c) 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 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

import 'package:cocoon_service/protos.dart' show Task;
import 'package:url_launcher/url_launcher.dart';

/// Show information regarding each attempt for a Task.
///
/// Currently shows a button that links to each individual log
/// on Stackdriver for a Task.
///
// TODO(chillers): Add more information to Task entity so we can show more
// information here. https://github.com/flutter/flutter/issues/47018
class TaskAttemptSummary extends StatelessWidget {
  const TaskAttemptSummary({this.task});

  /// The task to show information from.
  final Task task;

  /// The Google Cloud Project that hosts the Stackdriver logs.
  static const String _cloudProjectId = 'flutter-dashboard';

  @visibleForTesting

  /// This URL is configured to have Stackdriver show at the end of the log.
  static const String stackdriverLogUrlBase =
      'https://console.cloud.google.com/logs/viewer?project=$_cloudProjectId&resource=global&minLogLevel=0&expandAll=false&interval=NO_LIMIT&dateRangeUnbound=backwardInTime&logName=projects%2F$_cloudProjectId%2Flogs%2F';

  @override
  Widget build(BuildContext context) {
    return Container(
      height: task.attempts * 50.0,
      child: ListView(
        children: List<Widget>.generate(task.attempts, (int i) {
          final int attemptNumber = i + 1; // attempts start at 1, not 0
          return FlatButton(
            child: Text('Log for Attempt #$attemptNumber'),
            // If the given task attempt does not exist, such as in profile mode, it will redirect to show all logs.
            onPressed: () => launch(_stackdriverUrl(task, attemptNumber)),
          );
        }),
      ),
    );
  }

  String _stackdriverUrl(Task task, int attemptNumber) {
    return '$stackdriverLogUrlBase${task.key.child.name}_$attemptNumber';
  }
}
