import { pullFromCache } from '~/cache/api';
import { userLinkedObject } from './userLinkedObject';
import { approveJoinRequest } from '~/communityRepository/joinRequest/internalAPI/approveJoinRequest';
import { cancelJoinRequest } from '~/communityRepository/joinRequest/internalAPI/cancelJoinRequest';
import { rejectJoinRequest } from '~/communityRepository/joinRequest/internalAPI/rejectJoinRequest';

export const joinRequestLinkedObject = (
  joinRequest: Amity.InternalJoinRequest,
): Amity.JoinRequest => {
  return {
    ...joinRequest,
    get user(): Amity.User | undefined {
      const user = pullFromCache<Amity.InternalUser>([
        'user',
        'get',
        joinRequest.requestorPublicId,
      ])?.data;
      if (!user) return undefined;
      return userLinkedObject(user);
    },
    cancel: async () => {
      await cancelJoinRequest(joinRequest);
    },
    approve: async () => {
      await approveJoinRequest(joinRequest);
    },
    reject: async () => {
      await rejectJoinRequest(joinRequest);
    },
  };
};
