public MainPageViewModel()
 {
     _dataService = ServiceLocator.Current.GetInstance<IDataService>();
     _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
     NavigationService navService = _navigationService as NavigationService;
    navService.Configure("RecipeDetailView", typeof(RecipeDetailView));
     RecipeBox = _dataService.GetData();
     OpenBoxCommand = new RelayCommand(OpenRecipeBox);
     ShowRecipeDetailCommand = new RelayCommand<Recipe>(ShowRecipeDetail);
 }
            GenerateDesignRecipeBox()
        {
            RecipeBox rb = new RecipeBox();
            rb.Name = "Design Only";
            rb.Description = "Design time data margely bargely doogely doo";
            for (int i = 0; i < 4; i++)
            {
                RecipeGroup recipeGroup = new RecipeGroup();
                recipeGroup.Name = "Group " + i;
                for (int k = 0; k < 8; k++)
                {
                    Recipe r = new Recipe();
                    r.Name = "Recipe " + i + k;
                    r.Description = "The Recipe description is going here";

                    
                    Ingredient flour = new Ingredient("Flour", IngredientType.Dry);
                    flour.AdjustPercent(65);
                    r.AddIngredient(flour);

                    Ingredient water = new Ingredient("Water", IngredientType.Wet);
                    water.AdjustPercent(25);
                    r.AddIngredient(water);

                    Ingredient group = new Ingredient();
                    group.Name = "Starter";
                    group.AdjustPercent(10);

                    Ingredient flour2 = new Ingredient("Flour", IngredientType.Dry);
                    flour2.AdjustPercent(75);
                    r.AddIngredient(group);
                    group.AddIngredient(flour2);

                    Ingredient water2 = new Ingredient("Water", IngredientType.Wet);
                    water2.AdjustPercent(25);
                    group.AddIngredient(water2);
                    r.TotalWeight = 1000;

                    Step step = new Step();
                    step.Description =
                        "Here is some direction on how to do some shit when your doing those things you do with the stuff  and all that crap...You now have killer direction and such";
                    r.Steps.Add(step);
                    r.Steps.Add(new Step("Here is another step that you'll need to follow"));
                    r.BalancePercentages();

                    recipeGroup.Recipes.Add(r);
                }
                rb.RecipeGroups.Add(recipeGroup);
            }
            return rb;
        }
        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public MainViewModel(IDataService dataService)
        {
            _dataService = dataService;
            //if (IsInDesignMode)
            //{

            //}
            // else

            DataService ds = new DataService();
            RecipeBox = ds.GetData(IsInDesignMode);
            NewRecipeCommand = new RelayCommand(newRecipe);

            Recipes = new ObservableCollection<Recipe>(recipeBox.RecipeGroups);
            SelectedRecipe = recipes.First();

            SaveRecipeBoxCommand = new RelayCommand(saveRecipeBox);
            SaveAsRecipeBoxCommand = new RelayCommand(saveAsRecipeBox);
            WindowWidth = 600;

            DeleteRecipeCommand = new RelayCommand(deleteRecipe);
        }
        public async void SaveDataAsync(RecipeBox rb, bool newLocation = false)
        {
            try
            {
                Windows.Storage.ApplicationDataContainer localSettings =
    Windows.Storage.ApplicationData.Current.LocalSettings;
                string lastSavePath = localSettings.Values["LastSavePath"] as string;

                if (newLocation || string.IsNullOrEmpty(lastSavePath) || !File.Exists(lastSavePath))
                {
                    FileSavePicker fsp = new FileSavePicker();
                    fsp.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
                    fsp.SuggestedFileName = rb.Name;
                    fsp.FileTypeChoices.Add("XML", new List<string>() { ".xml" });
                    StorageFile file = await fsp.PickSaveFileAsync();
                    lastSavePath = file.Path;

                    string saveText = JsonConvert.SerializeObject(rb);
                    await FileIO.WriteTextAsync(file, saveText);
                    return;
                    //FolderBrowserDialog fb = new FolderBrowserDialog();
                    //DialogResult dr = fb.ShowDialog();
                    //if (dr == DialogResult.OK) lastSavePath = fb.SelectedPath;
                    //lastSavePath += "\\" + rb.Name + ".xml";
                }

                //XmlSerializer xs = new XmlSerializer(typeof(RecipeBox));
                //await FileIO.WriteTextAsync()
                //xs.Serialize(tw, rb);
                localSettings.Values["LastSavePath"] = lastSavePath;

            }
            catch (Exception e)
            {
                throw (e);
            }

        }
        private RecipeBox GenerateDefaultRecipeBox()
        {
            RecipeBox rb = new RecipeBox();
            rb.Name = "Default";
            rb.Description = "A default set of basic recipes to get you started";
            RecipeGroup group = new RecipeGroup();
            group.Name = "Basic";

            #region build Flaxseed sourdough bread
            Ingredient FlaxSeed = new Ingredient("Flax Seed", IngredientType.Dry);
            FlaxSeed.Weight = 34;
            Ingredient Water = new Ingredient("Water", IngredientType.Wet);
            Water.Weight = 124;
            Ingredient SeedMix = new Ingredient("Flax Seed Mix", IngredientType.Miscellaneous);
            SeedMix.AddIngredient(FlaxSeed);
            SeedMix.AddIngredient(Water);            
            SeedMix.SetWeightFromChildren();

            Recipe flaxSeedRecipe = new Recipe("Flax Seed Sourdough");
            flaxSeedRecipe.Description = "Popped flax seeds give this bread a soft, interesting texture";
            flaxSeedRecipe.AddIngredientWithWeight(FlaxSeed);

            Ingredient starter = new Ingredient("Starter", IngredientType.Miscellaneous);
            Ingredient flour = new Ingredient("Bread Flour", IngredientType.Dry);
            flour.Weight = 21;
            Ingredient H20 = new Ingredient("Water", IngredientType.Wet);
            H20.Weight = 21;
            starter.AddIngredient(flour);
            starter.AddIngredient(H20);
            starter.SetWeightFromChildren();
            Ingredient levain = new Ingredient("Levain", IngredientType.Miscellaneous);
            levain.AddIngredient(starter);
            Ingredient levainWater = new Ingredient("Water", IngredientType.Wet);
            levainWater.Weight = 135;
            levain.AddIngredient(levainWater);
            Ingredient levainFlour = new Ingredient("Bread Flour", IngredientType.Dry);
            levain.AddIngredient(levainFlour);
            levain.SetWeightFromChildren();
            flaxSeedRecipe.AddIngredientWithWeight(levain);

            Ingredient finalFlour = new Ingredient("Bread Flour", IngredientType.Dry);
            finalFlour.Weight = 121;
            flaxSeedRecipe.AddIngredientWithWeight(finalFlour);
            Ingredient salt = new Ingredient("Salt", IngredientType.Salt);
            flaxSeedRecipe.AddIngredientWithWeight(salt);
            group.Recipes.Add(flaxSeedRecipe);
            #endregion

            Recipe buiscuit = new Recipe("Sourdough Biscuits");
            buiscuit.Description = "These need to rise for a long time, 18-24 hours preferably";
            Ingredient buiscuitStarter = new Ingredient("Starter", IngredientType.Miscellaneous);
            Ingredient buiscuitStarterFlour = new Ingredient("Flour", IngredientType.Dry);
            buiscuitStarterFlour.Weight = 58.5;
            buiscuitStarter.AddIngredient(buiscuitStarterFlour);
            Ingredient buiscuitStarterWater = new Ingredient("Water", IngredientType.Wet);
            buiscuitStarterWater.Weight = 58.5;
            buiscuitStarter.AddIngredient(buiscuitStarterWater);
            buiscuitStarter.BalancePercentages();
            buiscuit.AddIngredientWithWeight(buiscuitStarter);

            Ingredient buiscuitFlour = new Ingredient("AP Flour", IngredientType.Dry);
            buiscuitFlour.Weight = 222;
            buiscuit.AddIngredientWithWeight(buiscuitFlour);

            Ingredient sugar = new Ingredient("Sugar", IngredientType.Sweet);
            sugar.Weight = 5;
            buiscuit.AddIngredientWithWeight(sugar);

            Ingredient buiscuitSalt = new Ingredient("Salt", IngredientType.Salt);
            buiscuitSalt.Weight = 5;
            buiscuit.AddIngredientWithWeight(buiscuitSalt);

            Ingredient butter = new Ingredient("Butter", IngredientType.Fat);
            butter.Weight = 111;
            buiscuit.AddIngredientWithWeight(butter);

            Ingredient milk = new Ingredient("Milk", IngredientType.Wet);
            milk.Weight = 140;
            buiscuit.AddIngredientWithWeight(milk);
            group.Recipes.Add(buiscuit);

            rb.RecipeGroups.Add(group);
            return rb;
        }
 public void SaveData(RecipeBox recipeBox, bool newLocation)
 {
     throw new NotImplementedException();
 }
 public void SaveDataAsync(RecipeBox recipeBox, bool newLocation = false)
 {
     throw new NotImplementedException();
 }
        private static RecipeBox GenerateDefaultRecipeBox()
        {
            Recipe r = new Recipe();
            r.Name = "Sourdough";
            Ingredient flour = new Ingredient("Flour", IngredientType.Dry);
            flour.AdjustPercent(65);
            r.AddIngredient(flour);

            Ingredient water = new Ingredient("Water", IngredientType.Wet);
            water.AdjustPercent(25);
            r.AddIngredient(water);

            Ingredient group = new Ingredient();
            group.Name = "Starter";
            group.AdjustPercent(10);

            Ingredient flour2 = new Ingredient("Flour", IngredientType.Dry);
            flour2.AdjustPercent(75);
            r.AddIngredient(group);
            group.AddIngredient(flour2);

            Ingredient water2 = new Ingredient("Water", IngredientType.Wet);
            water2.AdjustPercent(25);
            group.AddIngredient(water2);
            r.TotalWeight = 1000;

            Step step = new Step();
            step.Description =
                "Here is some direction on how to do some shit when your doing those things you do with the stuff  and all that crap...You now have killer direction and such";
            r.Steps.Add(step);
            r.BalancePercentages();

            Recipe r2 = new Recipe();
            r2.Name = "Jimmy Gabooty";
            Ingredient pasta = new Ingredient("pasta", IngredientType.Dry);
            pasta.AdjustPercent(65);
            r2.AddIngredient(pasta);
            Ingredient milk = new Ingredient("Milk", IngredientType.Wet);
            milk.AdjustPercent(35);
            r2.AddIngredient(milk);
            r2.TotalWeight = 1000;
            RecipeBox rb = new RecipeBox();
            rb.Name = "Default";
            RecipeGroup recipeGroup = new RecipeGroup();
            recipeGroup.Name = "Group";
            recipeGroup.Recipes.Add(r);
            recipeGroup.Recipes.Add(r2);
            rb.RecipeGroups.Add(recipeGroup);
            return rb;
        }
        public void SaveData(RecipeBox rb, bool newLocation = false)
        {
            try
            {
                string savePath = Settings.Default.LastSavePath;
                if (newLocation || string.IsNullOrEmpty(savePath) || ! File.Exists(savePath))
                {
                    FolderBrowserDialog fb = new FolderBrowserDialog();
                    DialogResult dr = fb.ShowDialog();
                    if (dr == DialogResult.OK) savePath = fb.SelectedPath;
                    savePath += "\\" + rb.Name + ".xml";
                }

                XmlSerializer xs = new XmlSerializer(typeof(RecipeBox));
                TextWriter tw = new StreamWriter(savePath);
                xs.Serialize(tw, rb);
                Settings.Default.LastSavePath = savePath;
                tw.Close();
            }
            catch (Exception e)
            {

                MessageBox.Show(e.Message);
            }
            Settings.Default.Save();
        }