protected void OnClick(object sender, EventArgs e)
        {
            var db = new BattleOfTheMachinesDbContext();
            var machineName = this.MachineName.Text;
            var graphicsCard = db.GraphicsCards.ToList().OrderBy(x => x.Power).First();
            var network = db.Networks.ToList().OrderBy(x => x.Power).First();
            var processor = db.Processors.ToList().OrderBy(x => x.Power).First();
            var ram = db.Rams.ToList().OrderBy(x => x.Power).First();
            var owner = this.User.Identity.GetUserId();

            var machine = new Motherboard
                              {
                                  Name = machineName,
                                  GraphicsCard = graphicsCard,
                                  Network = network,
                                  Processor = processor,
                                  Ram = ram,
                                  OwnerId = owner
                              };

            db.Machines.Add(machine);
            try
            {
                db.SaveChanges();
                Response.Redirect("~/Users/Machine");
            }
            catch (Exception)
            {
                // ignored
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            var db = new BattleOfTheMachinesDbContext();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == Context.User.Identity.GetUserId());

            if (machine != null)
            {
                this.machineName.InnerText = machine.Name;

                this.processorModel.InnerHtml = $"{machine.Processor.Model}";
                this.ramModel.InnerHtml = $"{machine.Ram.Model}";
                this.networkModel.InnerHtml = $"{machine.Network.Type}";
                this.graphicsModel.InnerHtml = $"{machine.GraphicsCard.Model}";

                this.processorPh.InnerHtml = $"{machine.Processor.Power}";
                this.ramPh.InnerHtml = $"{machine.Ram.Power}"; ;
                this.networkPh.InnerHtml = $"{machine.Network.Power}";
                this.graphicsPh.InnerHtml = $"{machine.GraphicsCard.Power}";

                this.processor.ImageUrl = ImageHelper.GetComponentUrl(machine.Processor.Image);
                this.network.ImageUrl = ImageHelper.GetComponentUrl(machine.Network.Image);
                this.ram.ImageUrl = ImageHelper.GetComponentUrl(machine.Ram.Image);
                this.graphics.ImageUrl = ImageHelper.GetComponentUrl(machine.GraphicsCard.Image);
            }
            else
            {
                Response.Redirect("~/Users/Tutorial");
            }
        }
 public IEnumerable<Motherboard> GetTopMachines()
 {
     var db = new BattleOfTheMachinesDbContext();
     var machines =
         db.Machines.ToList();
         return machines.OrderByDescending(x => x.Processor.Power + x.GraphicsCard.Power + x.Network.Power + x.Ram.Power)
             .Take(Math.Min(machines.Count, 3));
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            var db = new BattleOfTheMachinesDbContext();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == Context.User.Identity.GetUserId());           

            if (machine == null)
            {
                Response.Redirect("~/Users/Tutorial");
            }

            money.InnerText = machine.Currency.ToString();
        }
        public IQueryable<NetworkViewModel> NetworksGrid_GetData()
        {
            var db = new BattleOfTheMachinesDbContext();

            var userId = this.User.Identity.GetUserId();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == userId);
            var machineCapital = machine.Currency;
            var currentPower = machine.Network.Power;

            return db.Networks.ToList().Select(
                    x =>
                    new NetworkViewModel()
                    {
                        Id = x.Id,
                        Type = x.Type,
                        Speed = x.Speed,
                        Price = x.Power - currentPower,
                        CanBuy = (machineCapital - (x.Power - currentPower)) >= 0
                    }).AsQueryable();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            db = new BattleOfTheMachinesDbContext();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == Context.User.Identity.GetUserId());

            if (machine == null)
            {
                Response.Redirect("~/Users/Tutorial");
            }
            else
            {

                var userId = this.User.Identity.GetUserId();

                var timer = this.Motherboards.GetQuestTimerById(userId);// - DateTime.Now;

                // Get on quest view
                if (timer > DateTime.Now && !IsPostBack)
                {
                    this.TimerLabel.Text = TimerText + timer.ToString();
                    this.TimerImage.Visible = true;

                    DisableQuestButtons();
                }

                // Get reward view
                if (timer != null && timer < DateTime.Now)
                {
                    this.TimerLabel.Text = RewardText;
                    this.QuestRewardButton.Visible = true;

                    DisableQuestButtons();
                }

                if (timer == null)
                {
                    EnableQuestButtons();
                }

            }
        }
        public IQueryable<RamViewModel> RamsGrid_GetData()
        {
            var db = new BattleOfTheMachinesDbContext();

            var userId = this.User.Identity.GetUserId();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == userId);
            var machineCapital = machine.Currency;
            var currentPower = machine.Ram.Power;
            
            return db.Rams.ToList().Select(
                    x =>
                    new RamViewModel()
                    {
                        Model = x.Model,
                        Id = x.Id,
                        Price = x.Power - currentPower,
                        CanBuy = (machineCapital - (x.Power - currentPower)) >= 0,
                        Memory = x.Memory,
                        MemorySpeed = x.MemorySpeed
                    }).AsQueryable();
        }
        public IQueryable<CpuViewModel> ProcessorsGrid_GetData(object sender, EventArgs e)
        {
            var db = new BattleOfTheMachinesDbContext();

            var userId = this.User.Identity.GetUserId();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == userId);
            var machineCapital = machine.Currency;
            var currentPower = machine.Processor.Power;
            return
                db.Processors.ToList().Select(
                    x =>
                    new CpuViewModel()
                    {
                        Model = x.Model,
                        Id = x.Id,
                        CoreSpeed = x.CoreSpeed,
                        Cores = x.Cores,
                        Price = x.Power - currentPower,
                        CanBuy = (machineCapital - (x.Power - currentPower)) >= 0
                    }).AsQueryable();
        }
        public IQueryable<GraphicsViewModel> GraphicsGrid_GetData()
        {
            var db = new BattleOfTheMachinesDbContext();

            var userId = this.User.Identity.GetUserId();
            var machine = db.Machines.ToList().FirstOrDefault(x => x.OwnerId == userId);
            var machineCapital = machine.Currency;
            var currentPower = machine.GraphicsCard.Power;
                var graphicsDb = db.GraphicsCards.ToList();
            var result = graphicsDb.Select(
                    x =>
                    new GraphicsViewModel()
                    {
                        Model = x.Model,
                        Id = x.Id,
                        CoreSpeed = x.CoreSpeed,
                        Cores = x.Cores,
                        Price = x.Power - currentPower,
                        CanBuy = (machineCapital - (x.Power - currentPower)) >= 0,
                        VideoMemory = x.VideoMemory
                    });

            return result.AsQueryable();
        }
        protected void BuyCommand(object sender, CommandEventArgs e)
        {
            var db = new BattleOfTheMachinesDbContext();
            var machine = db.Machines.ToList().First(x => x.OwnerId == Context.User.Identity.GetUserId());

            var args = e.CommandArgument.ToString().Split('%').ToArray();
            var type = args[0];
            var id = args[1];
            var price = float.Parse(args[2]);

            if ((int)price > machine.Currency)
            {
                ErrorMessage.Text = "Nah... too pricey for ya'!";
            }
            else
            {

                switch (type)
                {
                    case "Processor":
                        machine.ProcessorId = id;
                        break;
                    case "Ram":
                        machine.RamId = id;
                        break;
                    case "Network":
                        machine.NetworkId = id;
                        break;
                    case "Graphics":
                        machine.GraphicsCardId = id;
                        break;
                    default:
                        throw new ArgumentException("Invalid type to buy");
                }
                
                try
                {
                    machine.Currency -= (int)price;
                    db.SaveChanges();
                }
                catch (Exception ex)
                {

                }

                
                this.Response.Redirect("~/Users/Machine");
            }
        }