module.exports = Self => {
    Self.remoteMethodCtx('notifyIssues', {
        description: 'Notifies new urgent issues',
        accessType: 'READ',
        returns: {
            type: 'Object',
            root: true
        },
        http: {
            path: `/notifyIssues`,
            verb: 'GET'
        }
    });

    Self.notifyIssues = async ctx => {
        const models = Self.app.models;
        const $t = ctx.req.__; // $translate
        const tickets = await models.OsTicket.rawSql(`
            SELECT t.ticket_id AS id, t.number, ua.username, td.subject
                FROM ost_ticket t
                    JOIN ost_user_account ua ON t.user_id = ua.user_id
                    JOIN ost_ticket__cdata td ON t.ticket_id = td.ticket_id
                    JOIN ost_ticket_priority tp ON td.priority = tp.priority_id
                    LEFT JOIN ost_department dept ON dept.id = t.dept_id
                WHERE tp.priority = 'emergency'
                    AND (t.staff_id = 0 AND t.team_id = 0)
                    AND dept.code = 'IT'
            `);

        if (!tickets.length) return;

        let message = $t(`There's a new urgent ticket:`);
        const ostUri = 'https://cau.verdnatura.es/scp/tickets.php?id=';
        tickets.forEach(ticket => {
            message += `\r\n[ID: *${ticket.number}* - ${ticket.subject} (@${ticket.username})](${ostUri + ticket.id})`;
        });

        const department = await models.Department.findOne({
            where: {code: 'IT'}
        });
        const channelName = department && department.chatName;

        if (channelName)
            return Self.send(ctx, `#${channelName}`, `@all ➔ ${message}`);

        return;
    };
};