/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

import { computed } from '@ember/object';
import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
import { fragmentOwner } from 'ember-data-model-fragments/attributes';

export default class ScaleEvent extends Fragment {
  @fragmentOwner() taskGroupScale;

  @attr('number') count;
  @attr('number') previousCount;
  @attr('boolean') error;
  @attr('string') evalId;

  @computed('count', function () {
    return this.count != null;
  })
  hasCount;

  @computed('count', 'previousCount', function () {
    return this.count > this.previousCount;
  })
  increased;

  @attr('date') time;
  @attr('number') timeNanos;

  @attr('string') message;
  @attr() meta;

  @computed('meta', function () {
    return Object.keys(this.meta).length > 0;
  })
  hasMeta;

  // Since scale events don't have proper IDs, this UID is a compromise
  @computed('time', 'timeNanos', 'message', function () {
    return `${+this.time}${this.timeNanos}_${this.message}`;
  })
  uid;
}
