// GET: BidHistories/Create
 public IActionResult Create(int?ItemId, int?AuctionId)
 {
     if (ItemId != null && ItemId > 0 && AuctionId != null && AuctionId > 0)
     {
         var media = _context.Media.Where(x => x.ItemId == ItemId).ToList();
         var item  = _context.Items.Where(x => x.ItemId == ItemId).SingleOrDefault();
         BidCreateViewModel tmp = new BidCreateViewModel
         {
             ItemId         = (int)ItemId,
             AuctionId      = (int)AuctionId,
             Media          = media,
             Item           = item,
             ItemCurrentBid = GetMaxBidByItemId(item.ItemId),
             ItemMinimumBid = GetMinimumBidByItemId(item.ItemId)
         };
         return(View(tmp));
     }
     else
     {
         return(RedirectToAction("Index"));
     }
 }
        public async Task <IActionResult> Create([Bind("BidDate,BidAmount,ItemId,AuctionId,ItemCurrentBid,ItemMinimumBid,Bidder_FirstName,Bidder_LastName,Bidder_PhoneNumber,Bidder_EmailAddress")] BidCreateViewModel bid)
        {
            //Retrieve this stuff just incase of validation errors:
            var media = _context.Media.Where(x => x.ItemId == bid.ItemId).ToList();
            var item  = _context.Items.Where(x => x.ItemId == bid.ItemId).SingleOrDefault();

            bool   HasErrors      = false;
            double ItemMinimumBid = GetMinimumBidByItemId(bid.ItemId);

            if (bid.BidAmount < ItemMinimumBid)
            {
                ModelState.AddModelError("BidAmount", "Your bid must be greater than or equal to the minimum bid.");
                //return RedirectToAction("Create", new { ItemId = bid.ItemId, AuctionId = bid.AuctionId });

                //Re-retrieve some values to prevent null exceptions
                bid.Media = media;
                bid.Item  = item;
                HasErrors = true;
            }

            //Manual validations... Please don't look too close at the laziness.
            if (String.IsNullOrWhiteSpace(bid.Bidder_FirstName))
            {
                ModelState.AddModelError("Bidder_FirstName", "Please enter your first name.");
                HasErrors = true;
            }
            if (string.IsNullOrWhiteSpace(bid.Bidder_LastName))
            {
                ModelState.AddModelError("Bidder_LastName", "Please enter your last name.");
                HasErrors = true;
            }
            if (String.IsNullOrWhiteSpace(bid.Bidder_PhoneNumber))
            {
                ModelState.AddModelError("Bidder_PhoneNumber", "Please a valid phone number.");
                HasErrors = true;
            }
            if (String.IsNullOrWhiteSpace(bid.Bidder_EmailAddress))
            {
                ModelState.AddModelError("Bidder_EmailAddress", "Please a valid email address.");
                HasErrors = true;
            }

            if (HasErrors)
            {
                return(View(bid));
            }

            Bidder newBidder = new Bidder
            {
                FirstName    = bid.Bidder_FirstName,
                LastName     = bid.Bidder_LastName,
                PhoneNumber  = bid.Bidder_PhoneNumber,
                EmailAddress = bid.Bidder_EmailAddress,
                IsRegistered = false,
                Password     = "******",
                Security     = "derpaderp"
            };

            _context.Bidders.Add(newBidder);
            await _context.SaveChangesAsync();

            BidHistory newBid = new BidHistory
            {
                //Auction = _context.Auctions.SingleOrDefault(a => a.AuctionId == 1), //Temp debug workaround because AuctionId keeps passing in as 0.
                //Auction = _context.Auctions.SingleOrDefault(a => a.AuctionID == bid.AuctionId),
                BidDate   = bid.BidDate,
                BidAmount = bid.BidAmount,
                ItemId    = bid.ItemId,
                BidderId  = newBidder.BidderID
                            //Bidder = _context.Bidders.FirstOrDefault(b => b.FirstName == bid.Bidder_FirstName && b.LastName == bid.Bidder_LastName)
            };

            var AddedBid   = _context.BidHistory.Add(newBid);
            int SavedValue = await _context.SaveChangesAsync();

            return(RedirectToAction("Index", "BidHistories", new { id = bid.AuctionId }));
        }