private void CreateBaseCommandClass()
        {
            string core = GetProjCoreDirectory();

            if (File.Exists(core + "\\Models\\BaseCommand.cs"))
            {
                MessageBox.Show("This file already exist!", "Info", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            {
                File.Create(core + "\\Models\\BaseCommand.cs").Close();

                string content = Resources.BaseCommand;
                content = content.Replace("namespace Models", $"namespace {ProjName}.Models");

                using (StreamWriter sw = new StreamWriter(core + "\\Models\\BaseCommand.cs", false))
                {
                    sw.Write(content);
                }


                if (ProjectType == ProjectType.WPF)
                {
                    bool isCompileAdded = false;

                    XDocument xdoc       = XDocument.Load(core + $"\\{ProjName.Replace("_", " ")}.csproj");
                    var       itemGroups = xdoc.Root.Descendants().Where(x => x.Name.LocalName.Equals("ItemGroup"));

                    foreach (var itemGroup in itemGroups)
                    {
                        var compiles = itemGroup.Descendants().Where(x => x.Name.LocalName.Equals("Compile")).ToList();
                        var pages    = itemGroup.Descendants().Where(x => x.Name.LocalName.Equals("Page")).ToList();

                        if (compiles.Count != 0 || pages.Count != 0)
                        {
                            XElement   compile   = new XElement("Compile");
                            XAttribute attribute = new XAttribute("Include", "Models\\BaseCommand.cs");

                            compile.Add(attribute);
                            itemGroup.Add(compile);

                            xdoc.Save(core + $"\\{ProjName.Replace("_", " ")}.csproj");

                            isCompileAdded = true;

                            break;
                        }
                    }
                }
            }
        }
        private string GetProjCoreDirectory()
        {
            string initialDirectory = slnPath;

            if (ProjectType == ProjectType.WPF)
            {
                initialDirectory  = initialDirectory.Replace(Path.GetFileName(slnPath), "");
                initialDirectory += ProjName.Replace("_", " ");

                return(initialDirectory);
            }
            else if (ProjectType == ProjectType.XamarinForms)
            {
                initialDirectory  = initialDirectory.Replace(Path.GetFileName(slnPath), "");
                initialDirectory += $"{ProjName.Replace("_", " ")}\\{ProjName.Replace("_", " ")}";

                return(initialDirectory);
            }
            else
            {
                return("C:\\");
            }
        }
        private void ImplementFiles()
        {
            string core = GetProjCoreDirectory();

            if (!Directory.Exists(core + "\\Models"))
            {
                Directory.CreateDirectory(core + "\\Models");
            }
            if (!Directory.Exists(core + "\\Views"))
            {
                Directory.CreateDirectory(core + "\\Views");
            }
            if (!Directory.Exists(core + "\\ViewModels"))
            {
                Directory.CreateDirectory(core + "\\ViewModels");
            }


            if (models.Count == 0)
            {
                CreateBaseCommandClass();
            }
            else
            {
                foreach (DataGridItem model in models)
                {
                    string endPath = core + $"\\Model\\{model.FileName}";

                    string modelContent = "";
                    using (StreamReader sr = new StreamReader(model.FilePath))
                    {
                        modelContent = sr.ReadToEnd();
                    }

                    modelContent = modelContent.Replace($"namespace {ProjName}", $"namespace {ProjName}.Models");

                    using (StreamWriter sw = new StreamWriter(model.FilePath, false))
                    {
                        sw.Write(modelContent);
                    }

                    File.Move(model.FilePath, endPath);

                    if (ProjectType == ProjectType.WPF)
                    {
                        string csprojContent = "";
                        using (StreamReader sr = new StreamReader(core + $"\\{ProjName.Replace("_", " ")}.csproj"))
                        {
                            csprojContent = sr.ReadToEnd();
                        }

                        csprojContent = csprojContent.Replace($"Compile Include=\"{model.FileName}\"", $"Compile Include=\"Models\\{model.FileName}\"");

                        using (StreamWriter sw = new StreamWriter(core + $"\\{ProjName.Replace("_", " ")}.csproj", false))
                        {
                            sw.Write(csprojContent);
                        }
                    }
                }
            }

            if (views.Count == 0)
            {
                if (ProjectType == ProjectType.WPF)
                {
                    File.Create(core + "\\Views\\MainWindow.xaml").Close();
                    File.Create(core + "\\Views\\MainWindow.xaml.cs").Close();

                    string xamlContent = Resources.MainWindow;
                    string csContent   = Resources.MainWindow_xaml;

                    xamlContent = xamlContent.Replace("x:Class=\"Views.MainWindow\"", $"x:Class=\"{ProjName}.Views.MainWindow\"");
                    csContent   = csContent.Replace("using ViewModels;", $"using {ProjName}.ViewModels");
                    csContent   = csContent.Replace("namespace Views", $"namespace {ProjName}.Views");

                    using (StreamWriter sw = new StreamWriter(core + "\\Views\\MainWindow.xaml", false))
                    {
                        sw.Write(xamlContent);
                    }
                    using (StreamWriter sw = new StreamWriter(core + "\\Views\\MainWindow.xaml.cs", false))
                    {
                        sw.Write(csContent);
                    }

                    bool isPageAdded = false;

                    XDocument xdoc       = XDocument.Load(core + $"\\{ProjName.Replace("_", " ")}.csproj");
                    var       itemGroups = xdoc.Root.Descendants().Where(node => node.Name.LocalName.Equals("ItemGroup"));

                    foreach (XElement itemGroup in itemGroups)
                    {
                        var compiles = itemGroup.Descendants().Where(node => node.Name.LocalName.Equals("Compile")).ToList();
                        var pages    = itemGroup.Descendants().Where(node => node.Name.LocalName.Equals("Page")).ToList();

                        if (compiles.Count != 0 || pages.Count != 0)
                        {
                            XElement compile = new XElement("Compile");

                            XAttribute attribute     = new XAttribute("Include", "Views\\MainWindow.xaml.cs");
                            XElement   dependentUpon = new XElement("DependentUpon", "MainWindow.xaml");
                            XElement   subType       = new XElement("SubType", "Code");

                            compile.Add(attribute);
                            compile.Add(dependentUpon);
                            compile.Add(subType);

                            XElement page = new XElement("Page");

                            attribute = new XAttribute("Include", "Views\\MainWindow.xaml");
                            XElement generator = new XElement("Generator", "MSBuils:Compile");
                            subType = new XElement("SubType", "Designer");

                            page.Add(attribute);
                            page.Add(generator);
                            page.Add(subType);

                            itemGroup.Add(page);
                            itemGroup.Add(compile);

                            xdoc.Save(core + $"\\{ProjName.Replace("_", " ")}.csproj");

                            isPageAdded = true;

                            break;
                        }
                    }
                }
                else if (ProjectType == ProjectType.XamarinForms)
                {
                    File.Create(core + "\\Views\\MainPage.xaml");
                    File.Create(core + "\\Views\\MainPage.xaml.cs");

                    string xamlContent = Resources.MainPage;
                    string csContent   = Resources.MainPage_xaml;

                    xamlContent = xamlContent.Replace("x:Class=\"Views.MainPage\"", $"x:Class=\"{ProjName}.Views.MainPage\"");
                    csContent   = csContent.Replace("using ViewModels;", $"using {ProjName}.ViewModels");
                    csContent   = csContent.Replace("namespace Views", $"namespace {ProjName}.Views");

                    using (StreamWriter sw = new StreamWriter(core + "\\Views\\MainPage.xaml", false))
                    {
                        sw.Write(xamlContent);
                    }
                    using (StreamWriter sw = new StreamWriter(core + "\\Views\\MainPage.xaml.cs", false))
                    {
                        sw.Write(csContent);
                    }
                }
            }
            else
            {
                foreach (DataGridItem view in views)
                {
                    string endPath = core + $"\\Views\\{view.FileName}";

                    string viewContent = "";
                    using (StreamReader sr = new StreamReader(view.FilePath))
                    {
                        viewContent = sr.ReadToEnd();
                    }

                    viewContent = viewContent.Replace($"x:Class=\"{ProjName}.{Path.GetFileNameWithoutExtension(view.FilePath)}\"", $"x:Class=\"{ProjName}.Views.{Path.GetFileNameWithoutExtension(view.FilePath)}\"");

                    using (StreamWriter sw = new StreamWriter(view.FilePath, false))
                    {
                        sw.Write(viewContent);
                    }

                    File.Move(view.FilePath, endPath);

                    if (ProjectType == ProjectType.WPF)
                    {
                        string csprojContent = "";
                        using (StreamReader sr = new StreamReader(core + $"\\{ProjName.Replace("_", " ")}.csproj"))
                        {
                            csprojContent = sr.ReadToEnd();
                        }

                        csprojContent = csprojContent.Replace($"Page Include=\"{view.FileName}\"", $"Page Include=\"Views\\{view.FileName}\"");
                        csprojContent = csprojContent.Replace($"Compile Include=\"{view.FileName}.cs\"", $"Compile Include=\"Views\\{view.FileName}.cs\"");

                        using (StreamWriter sw = new StreamWriter(core + $"\\{ProjName.Replace("_", " ")}.csproj", false))
                        {
                            sw.Write(csprojContent);
                        }
                    }


                    view.FilePath += ".cs";


                    endPath = core + $"\\Views\\{view.FileName}";

                    viewContent = "";
                    using (StreamReader sr = new StreamReader(view.FilePath))
                    {
                        viewContent = sr.ReadToEnd();
                    }

                    viewContent = viewContent.Replace($"namespace {ProjName}", $"namespace {ProjName}.Views");

                    using (StreamWriter sw = new StreamWriter(view.FilePath, false))
                    {
                        sw.WriteLine($"using {ProjName}.ViewModels;");
                        sw.Write(viewContent);
                    }

                    File.Move(view.FilePath, endPath);
                }
            }

            if (viewModels.Count == 0)
            {
                CreateBaseViewModelClass();
            }
            else
            {
                foreach (DataGridItem viewModel in viewModels)
                {
                    string endPath = core + $"\\ViewModels\\{viewModel.FileName}";

                    string viewModelContent = "";
                    using (StreamReader sr = new StreamReader(viewModel.FilePath))
                    {
                        viewModelContent = sr.ReadToEnd();
                    }

                    viewModelContent = viewModelContent.Replace($"namespace {ProjName}", $"namespace {ProjName}.ViewModels");

                    using (StreamWriter sw = new StreamWriter(viewModel.FilePath, false))
                    {
                        sw.WriteLine($"using {ProjName}.Models;");
                        sw.Write(viewModelContent);
                    }

                    File.Move(viewModel.FilePath, endPath);

                    if (ProjectType == ProjectType.WPF)
                    {
                        string csprojContent = "";
                        using (StreamReader sr = new StreamReader(core + $"\\{ProjName.Replace("_", " ")}.csproj"))
                        {
                            csprojContent = sr.ReadToEnd();
                        }

                        csprojContent = csprojContent.Replace($"Compile Include=\"{viewModel.FileName}\"", $"Compile Include=\"ViewModels\\{viewModel.FileName}\"");

                        using (StreamWriter sw = new StreamWriter(core + $"\\{ProjName.Replace("_", " ")}.csproj", false))
                        {
                            sw.Write(csprojContent);
                        }
                    }
                }
            }


            if (ProjectType == ProjectType.WPF)
            {
                string appContent = "";
                using (StreamReader sr = new StreamReader(core + "\\App.xaml"))
                {
                    appContent = sr.ReadToEnd();
                }

                string startupUri = "";
                Match  match      = Regex.Match(appContent, $"StartupUri=\"(.*)\" ");

                if (match.Groups.Count > 0)
                {
                    startupUri = match.Groups[0].Value;
                }

                appContent = appContent.Replace($"StartupUri=\"{startupUri}\"", $"StartupUri=\"Views/{startupUri}\"");

                using (StreamWriter sw = new StreamWriter(core + "\\App.xaml", false))
                {
                    sw.Write(appContent);
                }
            }
            else if (ProjectType == ProjectType.XamarinForms)
            {
                string appContent = "";
                using (StreamReader sr = new StreamReader(core + "\\App.xaml.cs"))
                {
                    appContent = sr.ReadToEnd();
                }

                using (StreamWriter sw = new StreamWriter(core + "\\App.xaml.cs", false))
                {
                    sw.WriteLine($"using {ProjName}.Views;");
                    sw.Write(appContent);
                }
            }
        }