define(['jquery', 'backbone', 'underscore', 'app', 'utils/apitypes'], function($, Backbone, _, App, Api) {

    return Backbone.Model.extend({

        // TODO
        // generated, not submitted
        idAttribute: 'user',

        defaults: {
            plugin: null,
            loginname: null,
            owner: -1,
            valid: false,
            validuntil: -1,
            trafficleft: -1,
            maxtraffic: -1,
            premium: false,
            activated: false,
            shared: false,
            options: null
        },

        // Model Constructor
        initialize: function() {
        },

        // Any time a model attribute is set, this method is called
        validate: function(attrs) {

        },

        save: function(options) {
            options = App.apiRequest('updateAccountInfo', {account: this.toJSON()}, options);
            return $.ajax(options);
        },

        destroy: function(options) {
            options = App.apiRequest('removeAccount', {account: this.toJSON()}, options);
            var self = this;
            options.success = function() {
                self.trigger('destroy', self, self.collection, options);
            };

            // TODO request is not dispatched
//            return Backbone.Model.prototype.destroy.call(this, options);
            return $.ajax(options);
        }
    });

});