const app = require('vn-loopback/server/server');

module.exports = Self => {
    app.on('started', function() {
        let models = ['Zone', 'ZoneEvent', 'ZoneExclusion'];

        for (let modelName of models) {
            let Model = app.models[modelName];

            Model.observe('after save', doCalc);
            Model.observe('after delete', doCalc);
        }

        async function doCalc(ctx) {
            try {
                await Self.rawSql(`
                    CREATE DEFINER = CURRENT_ROLE EVENT zoneClosure_doRecalc
                        ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 15 SECOND
                        DO CALL zoneClosure_recalc;
                `);
            } catch (err) {
                if (err.code != 'ER_EVENT_ALREADY_EXISTS') throw err;
            }
        }
    });
};