public void UpdateTweetViewSize(TweetView tweetView)
        {
            var tweetViewIndex = _instances.IndexOf(tweetView);

            if (tweetViewIndex < 0)
            {
                Debug.LogError("Can't find TweetView index");
                return;
            }
            var nextTweetView = _instances[(tweetViewIndex + 1) % _instances.Count];

            if (nextTweetView.transform.localPosition.y > tweetView.transform.localPosition.y)
            {
                return;
            }
            var diff = tweetView.transform.localPosition.y - tweetView.GetHeight() -
                       nextTweetView.transform.localPosition.y;

            foreach (var instance in _instances)
            {
                if (instance == tweetView)
                {
                    continue;
                }
                if (instance.transform.localPosition.y < tweetView.transform.localPosition.y)
                {
                    instance.transform.Translate(Vector3.up * diff);
                }
            }
        }
        public void OnTweetViewRemoved(TweetView tweetView)
        {
            var tweetViewIndex = _instances.IndexOf(tweetView);

            if (tweetViewIndex < 0)
            {
                Debug.LogError("Can't find TweetView index");
                return;
            }

            var height = tweetView.GetHeight();
            var border = tweetView.transform.localPosition.y;

            _instances.RemoveAt(tweetViewIndex);
            tweetView.DeinitTweet();
            tweetView.PlayerCommentView.DeinitTweet();
            _pool.ReturnObjectToPool(tweetView.GetComponent <PoolObject>());
            var instanceOffset = Vector3.up * height;

            foreach (var instance in _instances)
            {
                if (instance.transform.localPosition.y < border)
                {
                    instance.transform.Translate(instanceOffset);
                }
            }
            HideAllReplies();
        }
        public void OnCommentAdded(Tweet parentTweet, int childIndex)
        {
            TweetView tweetView      = null;
            var       tweetViewIndex = -1;

            for (var i = 0; i < _instances.Count; i++)
            {
                var instance = _instances[i];
                if (instance.Tweet == parentTweet)
                {
                    tweetView      = instance;
                    tweetViewIndex = i;
                    break;
                }
            }
            if (!tweetView)
            {
                Debug.LogError("Can't find parent TweetView instance");
                return;
            }

            TweetView prevTweetView;
            int       index;

            if (parentTweet.CommentIds.Count == 1)
            {
                prevTweetView = tweetView;
                index         = tweetViewIndex + 1;
            }
            else
            {
                prevTweetView = _instances[(tweetViewIndex + childIndex) % _instances.Count];
                index         = (tweetViewIndex + childIndex + 1) % _instances.Count;
            }
            var offset           = prevTweetView.transform.localPosition.y - prevTweetView.GetHeight();
            var commentTweetView = Add(offset, index);
            var tc = GameState.Instance.TweetsController;
            var ac = GameState.Instance.AgeController;
            var qc = GameState.Instance.QuestController;

            commentTweetView.TweetRoot.SetActive(true);
            commentTweetView.ReplyRoot.SetActive(false);
            commentTweetView.InitTweet(this, tc, ac, qc,
                                       tc.GetTweetById(parentTweet.CommentIds[childIndex]), false);
            commentTweetView.transform.SetSiblingIndex(prevTweetView.transform.GetSiblingIndex() + 1);
            var instanceOffset = Vector3.down * (commentTweetView.GetHeight() + 50f);

            foreach (var instance in _instances)
            {
                if (instance == commentTweetView)
                {
                    continue;
                }
                if (instance.transform.localPosition.y < prevTweetView.transform.localPosition.y)
                {
                    instance.transform.Translate(instanceOffset);
                }
            }
            // HideAllReplies();
        }
        public void ShowReply(TweetView tweetView)
        {
            var tweetViewIndex = _instances.IndexOf(tweetView);

            if (tweetViewIndex < 0)
            {
                Debug.LogError("Can't find TweetView instance");
                return;
            }
            var       tweet = tweetView.Tweet;
            TweetView prevTweetView;
            int       index;

            if (tweet.CommentIds.Count == 0)
            {
                prevTweetView = tweetView;
                index         = tweetViewIndex + 1;
            }
            else
            {
                prevTweetView = _instances[(tweetViewIndex + tweet.CommentIds.Count) % _instances.Count];
                index         = (tweetViewIndex + tweet.CommentIds.Count + 1) % _instances.Count;
            }
            var offset         = prevTweetView.transform.localPosition.y - prevTweetView.GetHeight();
            var replyTweetView = Add(offset, index);

            replyTweetView.TweetRoot.SetActive(false);
            replyTweetView.ReplyRoot.SetActive(true);
            replyTweetView.InitReply(tweet, this);
            replyTweetView.transform.SetSiblingIndex(prevTweetView.transform.GetSiblingIndex() + 1);
            var instanceOffset = Vector3.down * (replyTweetView.GetHeight() + 25f);

            foreach (var instance in _instances)
            {
                if (instance == replyTweetView)
                {
                    continue;
                }
                if (instance.transform.localPosition.y < prevTweetView.transform.localPosition.y)
                {
                    instance.transform.Translate(instanceOffset);
                }
            }
        }
        public void HideReply(TweetView tweetView)
        {
            var tweetViewIndex = _instances.IndexOf(tweetView);

            if (tweetViewIndex < 0)
            {
                Debug.LogError("Can't find TweetView instance");
                return;
            }
            var tweet = tweetView.Tweet;
            int index;

            if (tweet.CommentIds.Count == 0)
            {
                index = (tweetViewIndex + 1) % _instances.Count;
            }
            else
            {
                index = (tweetViewIndex + tweet.CommentIds.Count + 1) % _instances.Count;
            }
            var replyTweetView = _instances[index];

            _instances.RemoveAt(index);
            var border         = replyTweetView.transform.localPosition.y;
            var height         = replyTweetView.GetHeight();
            var instanceOffset = Vector3.up * (height + 25f);

            foreach (var instance in _instances)
            {
                if (instance.transform.localPosition.y <= border)
                {
                    instance.transform.Translate(instanceOffset);
                }
            }
            replyTweetView.PlayerCommentView.DeinitTweet();
            _pool.ReturnObjectToPool(replyTweetView.GetComponent <PoolObject>());
        }