public void UploadWoodRecords(iWood wood)
        {
            Console.WriteLine($"DATABASE WOODRECORDS: Started Writing woodrecords to database for {wood.Id}");
            using (SqlConnection connection = GetConnection())
            {
                connection.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)){
                    DataTable table = new DataTable();
                    table.Columns.Add("woodID", typeof(int));
                    table.Columns.Add("treeID", typeof(int));
                    table.Columns.Add("X", typeof(int));
                    table.Columns.Add("Y", typeof(int));

                    foreach (Tree tree in wood.Trees)
                    {
                        table.Rows.Add(wood.Id, tree.ID, tree.X, tree.Y);
                    }
                    bulkCopy.DestinationTableName = "WoodRecords";
                    bulkCopy.ColumnMappings.Add("woodID", "woodID");
                    bulkCopy.ColumnMappings.Add("treeID", "treeID");
                    bulkCopy.ColumnMappings.Add("X", "X");
                    bulkCopy.ColumnMappings.Add("Y", "Y");
                    bulkCopy.WriteToServer(table);
                }
            }
            Console.WriteLine($"DATABASE WOODRECORDS: Finished Writing woodrecords to database for {wood.Id}");
        }
        public void JumpToNextTree(iWood wood)
        {
            Tree currentTree = VisitedTrees[VisitedTrees.Count - 1];
            int  currentX    = currentTree.X;
            int  currentY    = currentTree.Y;

            List <Tree> tempTrees = wood.Trees.Except(VisitedTrees).ToList();

            tempTrees = tempTrees.OrderBy(t => Math.Sqrt(Math.Pow(t.X - currentX, 2) + Math.Pow(t.Y - currentY, 2))).ToList();
            double distanceToBorder = (new List <Double>()
            {
                wood.MaximumY - currentY, wood.maximumX - currentX, currentY, currentX
            }).Min();

            double distanceToClosestTree = Math.Sqrt(Math.Pow(tempTrees[0].X - currentX, 2) + Math.Pow(tempTrees[0].Y - currentY, 2));

            if (distanceToBorder <= distanceToClosestTree)
            {
                HasEscaped();
            }
            else
            {
                VisitedTrees.Add(tempTrees[0]);
            }
        }
        public void UploadLogs(iWood wood)
        {
            Console.WriteLine($"DATABASE WOODLOGS: Started Writing woodlogs to database for {wood.Id}");
            using (SqlConnection connection = GetConnection())
            {
                connection.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                {
                    DataTable table = new DataTable();
                    table.Columns.Add("woodId", typeof(int));
                    table.Columns.Add("monkeyId", typeof(int));
                    table.Columns.Add("message", typeof(string));

                    foreach (Monkey monkey in wood.Monkeys)
                    {
                        foreach (Tree tree in monkey.VisitedTrees)
                        {
                            string log = $"{monkey.Name} is now in tree {tree.ID} at location ({tree.X},{tree.Y}).";

                            table.Rows.Add(wood.Id, monkey.Id, log);
                        }
                    }
                    bulkCopy.DestinationTableName = "Logs";
                    bulkCopy.ColumnMappings.Add("woodId", "woodId");
                    bulkCopy.ColumnMappings.Add("monkeyId", "monkeyId");
                    bulkCopy.ColumnMappings.Add("message", "message");
                    bulkCopy.WriteToServer(table);
                }
            }
            Console.WriteLine($"DATABASE WOODLOGS: finished Writing woodlogs to database for {wood.Id}");
        }
 public void WriteReport(iWood wood)
 {
     Console.WriteLine($"REPORT: started writing report for {wood.Id}");
     using (StreamWriter writer = File.CreateText(Path.Combine(_reportsPath, $"Wood {wood.Id} Log.txt")))
     {
         int treeStep = 0;
         int clearedMonkeys;
         do
         {
             clearedMonkeys = 0;
             foreach (Monkey monkey in wood.Monkeys)
             {
                 if (treeStep < monkey.VisitedTrees.Count)
                 {
                     writer.WriteLine($"{monkey.Name} is in tree {monkey.VisitedTrees[treeStep].ID} at ({monkey.VisitedTrees[treeStep].X},{monkey.VisitedTrees[treeStep].Y})");
                 }
                 else
                 {
                     clearedMonkeys++;
                 }
             }
             treeStep++;
         } while (clearedMonkeys != wood.Monkeys.Count);
     }
     Console.WriteLine($"REPORT: finished writing report for {wood.Id}");
 }
 public void FillDataBase(iWood wood)
 {
     Console.WriteLine($"DATABASE: Started Writing to database for {wood.Id}");
     UploadWoodRecords(wood);
     UploadMonkeyRecords(wood);
     UploadLogs(wood);
     Console.WriteLine($"DATABASE: Finished writing to database for {wood.Id}");
 }
        public void DrawMap(iWood wood)
        {
            Bitmap bm           = new Bitmap(wood.maximumX * 10, wood.MaximumY * 10);
            Pen    circleDrawer = new Pen(Color.DarkGreen);

            Pen[] pens = new Pen[10];
            pens[0] = new Pen(Color.Purple, 4);
            pens[1] = new Pen(Color.Red, 4);
            pens[2] = new Pen(Color.Blue, 4);
            pens[3] = new Pen(Color.Yellow, 4);
            pens[4] = new Pen(Color.Lime, 4);
            pens[5] = new Pen(Color.Orange, 4);
            pens[6] = new Pen(Color.Aqua, 4);
            pens[7] = new Pen(Color.Beige, 4);
            pens[8] = new Pen(Color.Brown, 4);
            pens[9] = new Pen(Color.DarkBlue, 4);

            Brush[] brushes = new Brush[10];
            brushes[0] = new SolidBrush(Color.Purple);
            brushes[1] = new SolidBrush(Color.Red);
            brushes[2] = new SolidBrush(Color.Blue);
            brushes[3] = new SolidBrush(Color.Yellow);
            brushes[4] = new SolidBrush(Color.Lime);
            brushes[5] = new SolidBrush(Color.Orange);
            brushes[6] = new SolidBrush(Color.Aqua);
            brushes[7] = new SolidBrush(Color.Beige);
            brushes[8] = new SolidBrush(Color.Brown);
            brushes[9] = new SolidBrush(Color.DarkBlue);

            using (Graphics g = Graphics.FromImage(bm))
            {
                Console.WriteLine($"BITMAP: Started bitmap drawing for {wood.Id}");
                //bomen tekenen
                foreach (Tree tree in wood.Trees)
                {
                    g.DrawEllipse(circleDrawer, tree.X * 10, tree.Y * 10, 10, 10);
                }
                //voor elk aapje de tekening maken
                for (int i = 0; i < wood.Monkeys.Count; i++)
                {
                    //beginboom
                    g.FillEllipse(brushes[i % 10], wood.Monkeys[i].VisitedTrees[0].X * 10, wood.Monkeys[i].VisitedTrees[0].Y * 10, 10, 10);
                    for (int index = 1; index < wood.Monkeys[i].VisitedTrees.Count; index++)
                    {
                        //lijnen tussen de bomen
                        var temptrees = wood.Monkeys[i].VisitedTrees;
                        g.DrawLine(pens[i % 10], temptrees[index - 1].X * 10 + 5, temptrees[index - 1].Y * 10 + 5, temptrees[index].X * 10 + 5, temptrees[index].Y * 10 + 5);
                    }
                }
            }
            bm.Save(Path.Combine(_path, wood.Id.ToString() + " escapeRoutes.jpg"), ImageFormat.Jpeg);
            Console.WriteLine($"BITMAP: Finished bitmap drawing for {wood.Id}");
        }
        public void UploadMonkeyRecords(iWood wood)
        {
            Console.WriteLine($"DATABASE MONKEYRECORDS: Started Writing monkeyrecords to database for {wood.Id}");
            using (SqlConnection connection = GetConnection())
            {
                connection.Open();
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
                {
                    DataTable table = new DataTable();
                    table.Columns.Add("monkeyID", typeof(int));
                    table.Columns.Add("monkeyName", typeof(string));
                    table.Columns.Add("woodID", typeof(int));
                    table.Columns.Add("seqnr", typeof(int));
                    table.Columns.Add("treeID", typeof(int));
                    table.Columns.Add("X", typeof(int));
                    table.Columns.Add("Y", typeof(int));

                    foreach (Monkey monkey in wood.Monkeys)
                    {
                        for (int i = 0; i < monkey.VisitedTrees.Count; i++)
                        {
                            table.Rows.Add(monkey.Id, monkey.Name, wood.Id, i, monkey.VisitedTrees[i].ID, monkey.VisitedTrees[i].X, monkey.VisitedTrees[i].Y);
                        }
                    }
                    bulkCopy.DestinationTableName = "MonkeyRecords";
                    bulkCopy.ColumnMappings.Add("monkeyID", "monkeyID");
                    bulkCopy.ColumnMappings.Add("monkeyName", "monkeyName");
                    bulkCopy.ColumnMappings.Add("woodID", "woodID");
                    bulkCopy.ColumnMappings.Add("seqnr", "seqnr");
                    bulkCopy.ColumnMappings.Add("treeID", "treeID");
                    bulkCopy.ColumnMappings.Add("X", "X");
                    bulkCopy.ColumnMappings.Add("Y", "Y");
                    bulkCopy.WriteToServer(table);
                }
            }
            Console.WriteLine($"DATABASE MONKEYRECORDS: Finished Writing monkeyrecords to database for {wood.Id}");
        }