const { Job } = require('flitter-jobs')

class PushNotifyJob extends Job {
    static get services() {
        return [...super.services, 'models', 'jobs', 'output']
    }

    async execute(job) {
        try {
            const User = this.models.get('auth:User')

            const { data } = job
            let { title = '', message, priority = 5, user_id } = data

            const user = await User.findById(user_id)
            if ( !user ) throw new Error('Invalid user_id.')

            const notify = user.notify_config
            if ( !notify || !notify.active ) throw new Error('User does not have notifications configured.')

            this.info(`Sending notification to ${user.uid}...`)

            await notify.send({ title, message, priority })
        } catch (e) {
            this.error(e)
            throw e
        }

        this.success(`Notification sent!`)
    }
}

module.exports = exports = PushNotifyJob
