import { markAsRead } from '~/channelRepository/internalApi/markAsRead';
import { shallowClone } from '../shallowClone';
import { queryCache } from '~/cache/api';
import { channelMemberLinkedObject } from './channelMemberLinkedObject';

export const channelLinkedObject = (channel: Amity.InternalChannel): Amity.Channel => {
  let previewMembers: Amity.Membership<'channel'>[] = [];

  if (channel.type === 'conversation') {
    const channelUsers = queryCache<Amity.Membership<'channel'>>(['channelUsers', 'get']);
    if (channelUsers && channelUsers?.length > 0) {
      previewMembers = (
        channelUsers?.filter(({ data }) => data.channelId === channel.channelId) ?? []
      )
        // sort in ascending order by userInternalId
        .sort((a, b) => a.data.userInternalId.localeCompare(b.data.userInternalId))
        // Select only first 4 members
        .slice(0, 4)
        .map(({ data }) => channelMemberLinkedObject(data));
    }
  }

  return shallowClone(channel, {
    markAsRead: () => markAsRead(channel.channelInternalId),
    previewMembers,
  });
};
