public async Task <IActionResult> CreateOrder([FromBody] OrderModel model)
        {
            try
            {
                var userID = HttpContext.User.Identity.Name;
                if (userID == null)
                {
                    return(StatusCode(StatusCodes.Status401Unauthorized));
                }
                ApplicationUser user = await _context.Set <ApplicationUser>().SingleOrDefaultAsync(item => item.UserName == userID);

                if (user == null)
                {
                    return(BadRequest("Token is not related to any Account"));
                }
                Account account = _context.Set <Account>().Include(x => x.Cart)
                                  .ThenInclude(x => x.CartItems).FirstOrDefault(x => x.ID == user.AccountID);
                if (user == null || account == null)
                {
                    return(null);
                }
                //if (!user.IsVerified) return StatusCode(StatusCodes.Status426UpgradeRequired);

                Order order = new Order()
                {
                    AccountID      = account.ID,
                    CreationDate   = DateTime.Now,
                    FromTime       = DateTime.Parse(model.FromTime),
                    ToTime         = DateTime.Parse(model.ToTime),
                    Location       = model.Location,
                    PromoCode      = model.PromoCode,
                    LocationRemark = model.LocationRemark,
                    LocationText   = model.LocationText,
                    Mobile         = model.Mobile,
                    Remark         = model.Remark,
                    Name           = model.Name,
                    Status         = OrderStatus.InProgress.ToString(),
                    UseWallet      = model.UseWallet,
                };
                if (!string.IsNullOrEmpty(model.PromoCode))
                {
                    var Cash = _context.Set <CashOffer>().FirstOrDefault(s => s.PromoCode == model.PromoCode);
                    if (Cash != null)
                    {
                        order.Discount = Cash.Percentge;
                    }
                }
                foreach (var record in model.OrderItems)
                {
                    if (record == null)
                    {
                        continue;
                    }
                    OrderItem orderItem = new OrderItem()
                    {
                        ItemID   = record.OrderItemID,
                        Quantity = record.Quantity,
                        OfferID  = record.OfferID
                    };
                    order.OrderItems.Add(orderItem);
                    if (account.Cart != null)
                    {
                        var item = account.Cart.CartItems.FirstOrDefault(x => x.ItemID == record.OrderItemID);
                        if (item != null)
                        {
                            account.Cart.CartItems.Remove(item);
                        }
                    }
                }
                if (order.GenerateCode(_context as NavaraDbContext) == false)
                {
                    return(BadRequest("Error while generating Order Code"));
                }
                if (order.UseWallet == true)
                {
                    int amount = ((int)(account.Wallet / 100)) * 100;
                    amount             = Math.Min(amount, (account.Wallet as int?) ?? 0);
                    account.Wallet    -= amount;
                    order.WalletAmount = amount;
                }

                this._context.Set <Order>().Add(order);
                await this._context.SaveChangesAsync();

                Thread UpdateAllInfo = new Thread(async() =>
                {
                    using (var context = new NavaraDbContext())
                    {
                        var orginalOrder = await context.Orders.Include("OrderItems").Include("Account").Include("Account.User")
                                           .Include("OrderItems.Item").Include("OrderItems.Offer").FirstOrDefaultAsync(x => x.ID == order.ID);
                        await orginalOrder.FixMissingOfferItems(context);
                        await orginalOrder.UpdateOrder(context);
                        string pdfPath = await orginalOrder.CreatePDF(_converter, context as NavaraDbContext);
                        #region Send Email to Support
                        await EmailService.SendEmailToSupport($"New Order",
                                                              $"Order # {orginalOrder.Code}\r\n" +
                                                              $"Account: {orginalOrder.Account.Name}\r\n" +
                                                              $"Amount: {orginalOrder.OrderItems.Sum(x => x.Total)}\r\n" +
                                                              $"Date: {orginalOrder.CreationDate}\r\n" +
                                                              $"Days To Deliver: {orginalOrder.DaysToDeliver}\r\n" +
                                                              $"Items:\r\n{string.Join("\t | \t", orginalOrder.OrderItems.Select(x => x.Item?.Name + " : " + x.Quantity))}", Path.Combine("wwwroot", pdfPath));
                        string Mobile = "+" + order.Account.User.CountryCode + order.Account.User.PhoneNumber;
                        if (!string.IsNullOrWhiteSpace(Mobile))
                        {
                            string message = $"Thank you for choosing Navara Store\r\nYour Order had been recieved\r\nOrder Code: {order.Code}\r\nOrder invoice: {Path.Combine("http://api.navarastore.com/", pdfPath.Replace("\\", "/"))}";
                            SMSService.SendWhatsApp(message, Mobile);
                        }
                        #endregion
                    }
                });
                UpdateAllInfo.Start();
                return(Json(new { OrderCode = order.Code, DaysToDeliver = order.DaysToDeliver }));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }