/**
  Our data model for determining whether there's a new version of Discourse

  @class VersionCheck
  @extends Discourse.Model
  @namespace Discourse
  @module Discourse
**/
Discourse.VersionCheck = Discourse.Model.extend({

  noCheckPerformed: function() {
    return this.get('updated_at') === null;
  }.property('updated_at'),

  dataIsOld: function() {
    return this.get('version_check_pending') || moment().diff(moment(this.get('updated_at')), 'hours') >= 48;
  }.property('updated_at'),

  staleData: function() {
    return ( this.get('dataIsOld') ||
             (this.get('installed_version') !== this.get('latest_version') && this.get('missing_versions_count') === 0) ||
             (this.get('installed_version') === this.get('latest_version') && this.get('missing_versions_count') !== 0) );
  }.property('dataIsOld', 'missing_versions_count', 'installed_version', 'latest_version'),

  upToDate: function() {
    return this.get('missing_versions_count') === 0 || this.get('missing_versions_count') === null;
  }.property('missing_versions_count'),

  behindByOneVersion: function() {
    return this.get('missing_versions_count') === 1;
  }.property('missing_versions_count'),

  gitLink: function() {
    return "https://github.com/discourse/discourse/tree/" + this.get('installed_sha');
  }.property('installed_sha'),

  shortSha: function() {
    return this.get('installed_sha').substr(0,10);
  }.property('installed_sha')
});

Discourse.VersionCheck.reopenClass({
  find: function() {
    return Discourse.ajax('/admin/version_check').then(function(json) {
      return Discourse.VersionCheck.create(json);
    });
  }
});