text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.TwitterV2IncludesHelper = void 0;
  /**
   * Provide helpers for `.includes` of a v2 API result.
   * Needed expansions for a method to work are specified (*`like this`*).
   */
  class TwitterV2IncludesHelper {
      constructor(result) {
          this.result = result;
      }
      /* Tweets */
      get tweets() {
          return TwitterV2IncludesHelper.tweets(this.result);
      }
      static tweets(result) {
          var _a, _b;
          return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.tweets) !== null && _b !== void 0 ? _b : [];
      }
      tweetById(id) {
          return TwitterV2IncludesHelper.tweetById(this.result, id);
      }
      static tweetById(result, id) {
          return this.tweets(result).find(tweet => tweet.id === id);
      }
      /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */
      retweet(tweet) {
          return TwitterV2IncludesHelper.retweet(this.result, tweet);
      }
      /** Retweet associated with the given tweet (*`referenced_tweets.id`*) */
      static retweet(result, tweet) {
          var _a;
          const retweetIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])
              .filter(ref => ref.type === 'retweeted')
              .map(ref => ref.id);
          return this.tweets(result).find(t => retweetIds.includes(t.id));
      }
      /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */
      quote(tweet) {
          return TwitterV2IncludesHelper.quote(this.result, tweet);
      }
      /** Quoted tweet associated with the given tweet (*`referenced_tweets.id`*) */
      static quote(result, tweet) {
          var _a;
          const quoteIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])
              .filter(ref => ref.type === 'quoted')
              .map(ref => ref.id);
          return this.tweets(result).find(t => quoteIds.includes(t.id));
      }
      /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */
      repliedTo(tweet) {
          return TwitterV2IncludesHelper.repliedTo(this.result, tweet);
      }
      /** Tweet whose has been answered by the given tweet (*`referenced_tweets.id`*) */
      static repliedTo(result, tweet) {
          var _a;
          const repliesIds = ((_a = tweet.referenced_tweets) !== null && _a !== void 0 ? _a : [])
              .filter(ref => ref.type === 'replied_to')
              .map(ref => ref.id);
          return this.tweets(result).find(t => repliesIds.includes(t.id));
      }
      /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */
      author(tweet) {
          return TwitterV2IncludesHelper.author(this.result, tweet);
      }
      /** Tweet author user object of the given tweet (*`author_id`* or *`referenced_tweets.id.author_id`*) */
      static author(result, tweet) {
          const authorId = tweet.author_id;
          return authorId ? this.users(result).find(u => u.id === authorId) : undefined;
      }
      /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */
      repliedToAuthor(tweet) {
          return TwitterV2IncludesHelper.repliedToAuthor(this.result, tweet);
      }
      /** Tweet author user object of the tweet answered by the given tweet (*`in_reply_to_user_id`*) */
      static repliedToAuthor(result, tweet) {
          const inReplyUserId = tweet.in_reply_to_user_id;
          return inReplyUserId ? this.users(result).find(u => u.id === inReplyUserId) : undefined;
      }
      /* Users */
      get users() {
          return TwitterV2IncludesHelper.users(this.result);
      }
      static users(result) {
          var _a, _b;
          return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.users) !== null && _b !== void 0 ? _b : [];
      }
      userById(id) {
          return TwitterV2IncludesHelper.userById(this.result, id);
      }
      static userById(result, id) {
          return this.users(result).find(u => u.id === id);
      }
      /** Pinned tweet of the given user (*`pinned_tweet_id`*) */
      pinnedTweet(user) {
          return TwitterV2IncludesHelper.pinnedTweet(this.result, user);
      }
      /** Pinned tweet of the given user (*`pinned_tweet_id`*) */
      static pinnedTweet(result, user) {
          return user.pinned_tweet_id ? this.tweets(result).find(t => t.id === user.pinned_tweet_id) : undefined;
      }
      /* Medias */
      get media() {
          return TwitterV2IncludesHelper.media(this.result);
      }
      static media(result) {
          var _a, _b;
          return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.media) !== null && _b !== void 0 ? _b : [];
      }
      /** Medias associated with the given tweet (*`attachments.media_keys`*) */
      medias(tweet) {
          return TwitterV2IncludesHelper.medias(this.result, tweet);
      }
      /** Medias associated with the given tweet (*`attachments.media_keys`*) */
      static medias(result, tweet) {
          var _a, _b;
          const keys = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.media_keys) !== null && _b !== void 0 ? _b : [];
          return this.media(result).filter(m => keys.includes(m.media_key));
      }
      /* Polls */
      get polls() {
          return TwitterV2IncludesHelper.polls(this.result);
      }
      static polls(result) {
          var _a, _b;
          return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.polls) !== null && _b !== void 0 ? _b : [];
      }
      /** Poll associated with the given tweet (*`attachments.poll_ids`*) */
      poll(tweet) {
          return TwitterV2IncludesHelper.poll(this.result, tweet);
      }
      /** Poll associated with the given tweet (*`attachments.poll_ids`*) */
      static poll(result, tweet) {
          var _a, _b;
          const pollIds = (_b = (_a = tweet.attachments) === null || _a === void 0 ? void 0 : _a.poll_ids) !== null && _b !== void 0 ? _b : [];
          if (pollIds.length) {
              const pollId = pollIds[0];
              return this.polls(result).find(p => p.id === pollId);
          }
          return undefined;
      }
      /* Places */
      get places() {
          return TwitterV2IncludesHelper.places(this.result);
      }
      static places(result) {
          var _a, _b;
          return (_b = (_a = result.includes) === null || _a === void 0 ? void 0 : _a.places) !== null && _b !== void 0 ? _b : [];
      }
      /** Place associated with the given tweet (*`geo.place_id`*) */
      place(tweet) {
          return TwitterV2IncludesHelper.place(this.result, tweet);
      }
      /** Place associated with the given tweet (*`geo.place_id`*) */
      static place(result, tweet) {
          var _a;
          const placeId = (_a = tweet.geo) === null || _a === void 0 ? void 0 : _a.place_id;
          return placeId ? this.places(result).find(p => p.id === placeId) : undefined;
      }
      /* Lists */
      /** List owner of the given list (*`owner_id`*) */
      listOwner(list) {
          return TwitterV2IncludesHelper.listOwner(this.result, list);
      }
      /** List owner of the given list (*`owner_id`*) */
      static listOwner(result, list) {
          const creatorId = list.owner_id;
          return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;
      }
      /* Spaces */
      /** Creator of the given space (*`creator_id`*) */
      spaceCreator(space) {
          return TwitterV2IncludesHelper.spaceCreator(this.result, space);
      }
      /** Creator of the given space (*`creator_id`*) */
      static spaceCreator(result, space) {
          const creatorId = space.creator_id;
          return creatorId ? this.users(result).find(p => p.id === creatorId) : undefined;
      }
      /** Current hosts of the given space (*`host_ids`*) */
      spaceHosts(space) {
          return TwitterV2IncludesHelper.spaceHosts(this.result, space);
      }
      /** Current hosts of the given space (*`host_ids`*) */
      static spaceHosts(result, space) {
          var _a;
          const hostIds = (_a = space.host_ids) !== null && _a !== void 0 ? _a : [];
          return this.users(result).filter(u => hostIds.includes(u.id));
      }
      /** Current speakers of the given space (*`speaker_ids`*) */
      spaceSpeakers(space) {
          return TwitterV2IncludesHelper.spaceSpeakers(this.result, space);
      }
      /** Current speakers of the given space (*`speaker_ids`*) */
      static spaceSpeakers(result, space) {
          var _a;
          const speakerIds = (_a = space.speaker_ids) !== null && _a !== void 0 ? _a : [];
          return this.users(result).filter(u => speakerIds.includes(u.id));
      }
      /** Current invited users of the given space (*`invited_user_ids`*) */
      spaceInvitedUsers(space) {
          return TwitterV2IncludesHelper.spaceInvitedUsers(this.result, space);
      }
      /** Current invited users of the given space (*`invited_user_ids`*) */
      static spaceInvitedUsers(result, space) {
          var _a;
          const invitedUserIds = (_a = space.invited_user_ids) !== null && _a !== void 0 ? _a : [];
          return this.users(result).filter(u => invitedUserIds.includes(u.id));
      }
  }
  exports.TwitterV2IncludesHelper = TwitterV2IncludesHelper;
  