module.exports = function(Self) {
    Self.remoteMethodCtx('changeState', {
        description: 'Change state of tickets',
        accepts: [
            {
                arg: 'state',
                type: 'number',
                required: true,
                description: 'New state',
                http: {source: 'path'}
            }
        ],
        returns: {
            arg: 'response',
            type: 'boolean'
        },
        http: {
            verb: 'put',
            path: '/:state/changeState'
        }
    });

    Self.changeState = function(ctx, state, cb) {
        var tickets = ctx.req.body.tickets;

        Self.connectToService(ctx, 'client');

        Self.app.models.Worker.findOne({where: {userFk: ctx.req.accessToken.userId}}, function(err, emp) {
            if (err)
                cb(err, null);
            else
                changeState(emp.id, tickets, state, cb);
        });

        Self.disconnectFromService('client');
    };

    function changeState(emp, tickets, state, cb) {
        var inserts = [];
        var FakeProduction = Self.app.models.FakeProduction;

        tickets.forEach(function(t) {
            inserts.push({ticketFk: t, stateFk: state, workerFk: emp});
        }, this);

        Self.create(inserts, function(err, res) {
            if (err)
                cb(err, null);
            else {
                FakeProduction.updateAll({ticketFk: {inq: tickets}}, {stateFk: state}, function(err, info) {
                    cb(err, info);
                });
            }
        });
    }
};