public EjooUtilBotInstance(
     ItemsQueueRepo itemsQueueRepo,
     SubscriberRepo subscriberRepo,
     ITelegramBotClient telegramClient,
     ILogger <EjooUtilBotInstance> logger)
 {
     ItemsQueueRepo = itemsQueueRepo;
     SubscriberRepo = subscriberRepo;
     TelegramClient = telegramClient;
     Logger         = logger;
 }
        private void AddItem(Update update, SubscriberRecord subscriberRecord)
        {
            var item = new ItemRecord
            {
                BotInstanceId = BotInstanceId,
                MessageId     = update.Message.MessageId,
                ChatId        = subscriberRecord.ChatId,
            };

            if (update.Message.Type == MessageType.Photo)
            {
                item.ItemType = ItemRecord.ItemTypes.IMAGE;
                item.FileId   = update.Message.Photo[update.Message.Photo.Length - 1].FileId;
                ItemsQueueRepo.Add(subscriberRecord, item);
            }
            else if (update.Message.Type == MessageType.Text)
            {
                var isUri = Uri.IsWellFormedUriString(update.Message.Text, UriKind.RelativeOrAbsolute);
                item.ItemType = ItemRecord.ItemTypes.WEB_PAGE;
                item.Text     = update.Message.Text;
            }
            else if (update.Message.Type == MessageType.Document)
            {
                switch (update.Message.Document.MimeType)
                {
                case "application/pdf":
                    item.ItemType = ItemRecord.ItemTypes.PDF_FILE;
                    item.FileId   = update.Message.Document.FileId;
                    ItemsQueueRepo.Add(subscriberRecord, item);
                    break;

                case "image/jpeg":
                case "image/png":
                    item.ItemType = ItemRecord.ItemTypes.IMAGE;
                    item.FileId   = update.Message.Document.FileId;
                    ItemsQueueRepo.Add(subscriberRecord, item);
                    break;
                }
            }
        }
        private void Flush(Update update, SubscriberRecord subscriberRecord)
        {
            var currentSessionImages = ItemsQueueRepo.GetCurrentSessionImages(subscriberRecord).ToArray();

            if (!currentSessionImages.Any())
            {
                TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, "چیزی برای تبدیل به پی دی اف وجود ندارد.",
                                                    replyMarkup: Keyboards.FlushMarkup);
                return;
            }

            TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, $"در حال بارگزاری { currentSessionImages.Length } فایل",
                                                replyMarkup: Keyboards.FlushMarkup);
            var progreessMsgId = TelegramClient.SendTextMessageAsync(subscriberRecord.ChatId, GetProgressString(0, 10)).Result.MessageId;

            var memStream = new MemoryStream();

            using (var pdfWriter = new PdfWriter(memStream))
                using (var pdfDoc = new PdfDocument(pdfWriter))
                    using (var document = new iText.Layout.Document(pdfDoc, new PageSize(0, 0)))
                    {
                        for (var i = 0; i < currentSessionImages.Length; i++)
                        {
                            var currentSessionImage = currentSessionImages[i];

                            switch (currentSessionImage.ItemType)
                            {
                            case ItemRecord.ItemTypes.IMAGE:
                            {
                                var imageStream = new MemoryStream();
                                var result      = TelegramClient
                                                  .GetInfoAndDownloadFileAsync(currentSessionImage.FileId, imageStream).Result;

                                var image = new Image(ImageDataFactory.Create(imageStream.ToArray()));
                                pdfDoc.AddNewPage(new PageSize(image.GetImageWidth(), image.GetImageHeight()));
                                image.SetFixedPosition(pdfDoc.GetNumberOfPages(), 0, 0);
                                document.Add(image);
                            }
                            break;

                            case ItemRecord.ItemTypes.PDF_FILE:
                            {
                                try
                                {
                                    var memoryStream = new MemoryStream();
                                    var result       = TelegramClient.GetInfoAndDownloadFileAsync(currentSessionImage.FileId, memoryStream).Result;

                                    var bytes      = memoryStream.ToArray();
                                    var tempStream = new MemoryStream(bytes);

                                    using (var pdfReader = new PdfReader(tempStream))
                                    {
                                        using (var newPdfDoc = new PdfDocument(pdfReader))
                                        {
                                            newPdfDoc.CopyPagesTo(1,
                                                                  newPdfDoc.GetNumberOfPages(),
                                                                  pdfDoc);
                                        }
                                    }

                                    tempStream.Close();
                                    memoryStream.Close();
                                }
                                catch (Exception exception)
                                {
                                    var baseException = exception.GetBaseException();
                                    Logger.LogError(baseException, "Read Pdf File Failed: {Message} -> {StackTrace}", baseException.Message, baseException.StackTrace);
                                }
                            }
                            break;

                            default:
                                break;
                            }

                            TelegramClient.EditMessageTextAsync(subscriberRecord.ChatId, progreessMsgId,
                                                                GetProgressString(i + 1, currentSessionImages.Length));
                        }
                    }


            var resultEdit = TelegramClient.EditMessageTextAsync(subscriberRecord.ChatId, progreessMsgId, "در حال آپلود فایل...").Result;

            SendPdf(subscriberRecord, memStream);
            memStream.Close();
            ItemsQueueRepo.ClearCurrentSessionImages(subscriberRecord);
        }