/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import DS from 'ember-data';

export default DS.Model.extend({
  containerId: DS.attr('string'),
  state: DS.attr('string'),
  user: DS.attr('string'),
  exitCode: DS.attr('string'),
  diagnostics: DS.attr('string'),
  totalMemoryNeeded: DS.attr('number'),
  totalVCoresNeeded: DS.attr('number'),
  containerLogFiles: DS.attr('array'),

  /**
   * Indicates that there was no container retrieved from backend.
   */
  isDummyContainer: function() {
    return this.get('id') === "dummy";
  }.property("id"),

  containerStateStyle: function() {
    var style = "primary";
    var containerState = this.get('state');
    var containerExitCode = this.get('exitCode');
    if (containerState === "DONE") {
      if (parseInt(containerExitCode) === 0) {
        style = "success";
      } else if (containerExitCode !== "N/A") {
        style = "danger";
      }
    }
    if (containerState === "EXITED_WITH_SUCCESS") {
      style = "success";
    }
    if (containerState === "EXITED_WITH_FAILURE") {
      style = "danger";
    }
    return "label label-" + style;
  }.property("state", "exitCode")
});
