// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider';
import withObservables from '@nozbe/with-observables';
import {of as of$} from 'rxjs';
import {switchMap} from 'rxjs/operators';

import {observeConfigBooleanValue} from '@queries/servers/system';
import {observeUser} from '@queries/servers/user';
import {getUserCustomStatus, isCustomStatusExpired} from '@utils/user';

import CustomStatus from './custom_status';

import type {WithDatabaseArgs} from '@typings/database/database';

type HeaderInputProps = {
    userId: string;
};

const enhanced = withObservables(
    ['userId'],
    ({userId, database}: WithDatabaseArgs & HeaderInputProps) => {
        const user = observeUser(database, userId);
        const isCustomStatusEnabled = observeConfigBooleanValue(database, 'EnableCustomUserStatuses');
        const customStatus = user.pipe(switchMap((u) => (u?.isBot ? of$(undefined) : of$(getUserCustomStatus(u)))));
        const customStatusExpired = user.pipe(switchMap((u) => (u?.isBot ? of$(false) : of$(isCustomStatusExpired(u)))));

        return {
            customStatus,
            customStatusExpired,
            isCustomStatusEnabled,
        };
    });

export default withDatabase(enhanced(CustomStatus));
