define([
    'app',
    'modules/catalog-code',
],
    function (app, CatalogCode) {

        var Main = {
            Models: {},
            Collections: {},
        };

        (function () {
            var superRef, superProto, classRef;

            superRef = CatalogCode.Models.CatalogCode;
            superProto = superRef.prototype;

            Main.Models.StatusModel = classRef = superRef.extend({
                procedures: {
                    get: app.DatabaseNames.ELT + '.CAT.GetEquipmentStatus',
                },
            });
        })();

        (function () {
            var superRef, superProto, classRef;

            superRef = CatalogCode.Collections.CatalogCodes;
            superProto = superRef.prototype;

            Main.Collections.StatusCollection = classRef = superRef.extend({
                model: Main.Models.StatusModel,
            });
            _.extend(classRef, {
                fetch: function (options) {
                    var opt = _.extend(
                        { error: function () { }, success: function () { }, },
                        options
                    );

                    classRef.prototype.getData.apply(classRef.prototype, [_.extend(
                        {},
                        opt,
                        {
                            success: function (resp) {
                                if (resp.Table) {
                                    opt.success(_.map(resp.Table, classRef.prototype.model.prototype.parse));
                                }
                                else {
                                    var msg = (resp.Message) ? resp.Message : 'Can not fetch equipment status.';

                                    console.error(new Error(msg).stack);
                                    opt.error(msg);
                                }
                            },
                        }
                    )]);
                },
            });
        })();

        // Required, return the module for AMD compliance.
        return Main;

    });