// Copyright 2020 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 'package:gcloud/db.dart';

/// Class that represents an update having been posted to a GitHub
/// flutter/flutter PR on the status of tryjobs generated on Flutter Gold.
@Kind(name: 'GithubGoldStatusUpdate')
class GithubGoldStatusUpdate extends Model<int> {
  GithubGoldStatusUpdate({
    Key<int>? key,
    this.pr,
    this.head,
    this.status,
    this.description,
    this.updates,
    this.repository,
  }) {
    parentKey = key?.parent;
    id = key?.id;
  }

  // The flutter-gold status cannot report a `failure` status
  // due to auto-rollers. This is why we hold a `pending` status
  // when there are image changes. This provides the opportunity
  // for images to be triaged, and the auto-roller to proceed.
  // For more context, see: https://github.com/flutter/flutter/issues/48744

  static const String statusCompleted = 'success';

  static const String statusRunning = 'pending';

  @IntProperty(propertyName: 'PR', required: true)
  int? pr;

  @StringProperty(propertyName: 'Head')
  String? head;

  @StringProperty(propertyName: 'Status', required: true)
  String? status;

  @StringProperty(propertyName: 'Description', required: true)
  String? description;

  @IntProperty(propertyName: 'Updates', required: true)
  int? updates;

  @StringProperty(propertyName: 'Repository', required: true)
  String? repository;

  @override
  String toString() {
    final StringBuffer buf = StringBuffer()
      ..write('$runtimeType(')
      ..write('id: $id')
      ..write(', parentKey: ${parentKey?.id}')
      ..write(', key: ${parentKey == null ? null : key.id}')
      ..write(', pr: $pr')
      ..write(', head: $head')
      ..write(', lastStatus: $status')
      ..write(', description $description')
      ..write(', updates: $updates')
      ..write(', repository: $repository')
      ..write(')');
    return buf.toString();
  }
}
