public int Insert(string textFromImage)
        {
            #region TextProcessing
            var recognizedLines     = _textProcessing.SplitToLines(textFromImage);
            var goodRecognizedLines = _textProcessing.CleanIrrelevantLines(recognizedLines);
            var storeName           = _textProcessing.RecognizeStore(recognizedLines);
            var timestamp           = _textProcessing.RecognizeDate(recognizedLines);

            var namesAndPrices = _textProcessing.GetNamesAndPricesFromLines(goodRecognizedLines);

            var namesInDb = namesAndPrices.Select(x => x.Key).ToList();
            var prices    = namesAndPrices.Select(x => x.Value).ToList();
            var recognizedProductNames = _textProcessing.GetClosestProductsNames(namesInDb);
            #endregion
            var namesInDbAndPrices = new List <KeyValuePair <string, decimal> >();
            var status             = true;

            for (int i = 0; i < namesAndPrices.Count; i++)
            {
                namesInDbAndPrices.Add(new KeyValuePair <string, decimal>(recognizedProductNames[i], prices[i]));
            }

            var distinctProducts = _textProcessing.GetDistinctProducts(namesInDbAndPrices);

            using (_dataContext)
            {
                foreach (var item in distinctProducts)
                {
                    var storeId   = _dataContext.Stores.FirstOrDefault(y => y.Name == storeName).Id;
                    var productId = _dataContext.Products.FirstOrDefault(y => y.Name == item.Key).Id;

                    if (storeId == default(short) || productId == default(int))
                    {
                        status = false;
                        continue;
                    }

                    var x = new Record
                    {
                        Price     = item.Value.Item1,
                        Quantity  = item.Value.Item2,
                        TimeStamp = timestamp,
                        StoreId   = storeId,
                        ProductId = productId
                    };
                    _dataContext.Records.Add(x);
                }
                _dataContext.SaveChanges();
                return(status ? 0 : 1);
            }
        }
        /// <summary>
        /// Main method of converting image to
        /// Receipt instance that holds:
        ///     list of products;
        ///     timestamp;
        ///     store name.
        /// </summary>
        /// <param name="textProcessing"></param>
        /// <param name="image"></param>
        /// <returns>Receipt instance.</returns>


        public Receipt ConvertImageToReceipt(byte[] imageArgs)
        {
            var ti = new TaskInit(_updater);
            var imageProcessing = new ImageProcessing();

            // var image = (Bitmap)Image.FromStream(new MemoryStream(Convert.FromBase64String(imageArgs)));
            var image                = new Bitmap("filename"); //TBD; depends on deserialization.
            var textFromImage        = imageProcessing.GetTextFromImage(image);
            var recognizedLines      = _textProcessing.SplitString(textFromImage.Result);
            var storeName            = _textProcessing.RecognizeStore(recognizedLines);
            var timestamp            = _textProcessing.RecognizeDate(recognizedLines);
            var goodRecognizedLines  = _textProcessing.CleanIrrelevantLines(recognizedLines);
            var listOfProductDetails = _textProcessing.GetListOfNamesAndPrices(goodRecognizedLines);
            var listOfProducts       = GetProducts(listOfProductDetails);

            ListInitialized += ti.OnListInitialized;
            ti.Receipt       = new Receipt(listOfProducts, storeName, timestamp);
            OnListInitialized();

            return(ti.Receipt);
        }