import { takeLatest } from 'redux-saga/effects';
import { Q } from '@nozbe/watermelondb';

import Navigation from '../lib/Navigation';
import { MESSAGES } from '../actions/actionsTypes';
import RocketChat from '../lib/rocketchat';
import database from '../lib/database';
import log from '../utils/log';

const goRoom = function goRoom({
	rid, name, fname, message
}) {
	Navigation.navigate('RoomsListView');
	Navigation.navigate('RoomView', {
		rid, name, fname, t: 'd', message
	});
};

const handleReplyBroadcast = function* handleReplyBroadcast({ message }) {
	try {
		const db = database.active;
		const { username, name } = message.u;
		const subsCollection = db.collections.get('subscriptions');
		const subscriptions = yield subsCollection.query(Q.where('name', username)).fetch();
		if (subscriptions.length) {
			yield goRoom({
				rid: subscriptions[0].rid, name: username, fname: name, message
			});
		} else {
			const room = yield RocketChat.createDirectMessage(username);
			yield goRoom({
				rid: room.rid, name: username, fname: name, message
			});
		}
	} catch (e) {
		log(e);
	}
};

const root = function* root() {
	yield takeLatest(MESSAGES.REPLY_BROADCAST, handleReplyBroadcast);
};
export default root;