zrequire('stream_data');
zrequire('people');
zrequire('compose_fade');

const me = {
    email: 'me@example.com',
    user_id: 30,
    full_name: 'Me Myself',
};

const alice = {
    email: 'alice@example.com',
    user_id: 31,
    full_name: 'Alice',
};

const bob = {
    email: 'bob@example.com',
    user_id: 32,
    full_name: 'Bob',
};

people.add(me);
people.initialize_current_user(me.user_id);

people.add(alice);
people.add(bob);

run_test('set_focused_recipient', () => {
    const sub = {
        stream_id: 101,
        name: 'social',
        subscribed: true,
        can_access_subscribers: true,
    };
    stream_data.add_sub(sub);
    stream_data.set_subscribers(sub, [me.user_id, alice.user_id]);

    global.$ = function (selector) {
        switch (selector) {
        case '#stream_message_recipient_stream':
            return {
                val: function () {
                    return 'social';
                },
            };
        case '#stream_message_recipient_topic':
            return {
                val: function () {
                    return 'lunch';
                },
            };
        }
    };

    compose_fade.set_focused_recipient('stream');

    assert.equal(compose_fade.would_receive_message('me@example.com'), true);
    assert.equal(compose_fade.would_receive_message('alice@example.com'), true);
    assert.equal(compose_fade.would_receive_message('bob@example.com'), false);
    assert.equal(compose_fade.would_receive_message('nonrealmuser@example.com'), true);

    const good_msg = {
        type: 'stream',
        stream_id: 101,
        topic: 'lunch',
    };
    const bad_msg = {
        type: 'stream',
        stream_id: 999,
        topic: 'lunch',
    };
    assert(!compose_fade.should_fade_message(good_msg));
    assert(compose_fade.should_fade_message(bad_msg));
});
