/// <summary>
        /// Veranderd de status van de tram
        /// </summary>
        /// <param name="tram">De tram die van status moet worden veranderd</param>
        /// <param name="tramStatus">De status waar de tram naar moet worden veranderd</param>
        public string TramStatusAanpassen(Tram tram, TramStatus tramStatus) //TODO: wanneer de tram naar indienst wordt verzet en op het eerste spoor staat dan verdwijnt die uit de
        {
            DatabaseController dc = new DatabaseController();

            if (tramStatus == TramStatus.InDienst)
            {
                Spoor  spoor  = GetSpoorByTram(tram);
                Sector sector = GetSectorByTram(tram);

                if (spoor.Sectoren[0].Id == sector.Id)
                {
                    sector.Tram   = null;
                    sector.Status = SectorStatus.leeg;
                    dc.UpdateSector(sector);
                }
                else
                {
                    return("De tram wordt geblokkeerd door een andere tram op het spoor, hierdoorm kan de tram nog niet naar indienst worden gezet.");
                }
            }
            else
            {
                tram.Status = tramStatus; //TODO: tram naar onderhouds of normaal spoor sturen wanneer die van status is veranderd. (kan volgens mij met algoritme)
            }

            if (dc.UpdateTram(tram))
            {
                return("Gelukt! Tramstatus van tram " + tram.TramNummer + " is nu " + tramStatus.ToString() + ".");
            }
            else
            {
                return("Kon de tramstatus van tram " + tram.TramNummer + " niet aanpassen.");
            }
        }
 /// <summary>
 /// Deelt de tram in op een spoor dat voldoet aan de eisen van ons algoritme.
 /// </summary>
 /// <param name="tram">De tram die ingedeelt moet worden</param>
 /// <param name="dc">De databasecontroller die aangemaakt wordt in de DeelTramBeterIn methode</param>
 public void DeelTramInVolgensAlgoritme(Tram tram, DatabaseController dc)
 {
     for (int x = 0; x < alleSporen.Count; x++)                                                                                                               //doorloopt alle sporen.
     {
         if (alleSporen[x].SpoorStatus == SpoorStatus.InGebruik)                                                                                              //wanneer het spoor in gebruik is.
         {
             for (int i = 0; i < alleSporen[x].Sectoren.Count; i++)                                                                                           //doorloopt alle sectoren van het spoor.
             {
                 if (alleSporen[x].Sectoren[i].Status == SectorStatus.leeg && alleSporen[x].Sectoren[i].IsGereserveerdCheck(dc.GetAllReservering()) == false) //indien er nog een sector vrij is.
                 {
                     if (i - 1 != -1 && alleSporen[x].Sectoren[i - 1].Tram != null)
                     {
                         if (Convert.ToInt32(alleSporen[x].Sectoren[i - 1].Tram.VertrekTijd) <= Convert.ToInt32(tram.VertrekTijd)) //indien de vertrektijd van de laatste tram op het spoor vroeger is dan van de parameter tram.
                         {
                             alleSporen[x].Sectoren[i].Status = SectorStatus.bezet;
                             alleSporen[x].Sectoren[i].Tram   = tram;
                             dc.UpdateSector(alleSporen[x].Sectoren[i]); //de sector wordt geÜpdate
                             tram.Status = TramStatus.Geparkeerd;
                             dc.UpdateTram(tram);                        //de tram word geüpdate.
                             return;
                         }
                         else
                         {
                             break;
                         }
                     }
                 }
             }
         }
         else
         {
             alleSporen[x].SpoorStatus = SpoorStatus.InGebruik;
             dc.UpdateSpoor(alleSporen[x]); //spoor wordt geüpdate.
             alleSporen[x].Sectoren.First().Status = SectorStatus.bezet;
             alleSporen[x].Sectoren.First().Tram   = tram;
             dc.UpdateSector(alleSporen[x].Sectoren.First()); //de sector wordt geÜpdate
             tram.Status = TramStatus.Geparkeerd;
             dc.UpdateTram(tram);                             //de tram word geüpdate.
             return;
         }
     }
 }
        /// <summary>
        /// Verplaats de tram naar een ander spoor of sector
        /// </summary>
        /// <param name="tram">De tram die verplaatst moet worden</param>
        /// <param name="spoorVan">Het spoor waar die tram op staat</param>
        /// <param name="sectorVan">De sector waar die tram op staat</param>
        /// <param name="spoorNaar">Het spoor waar de tram naar toe gaat</param>
        /// <param name="sectorNaar">De sector waar de tram naar toe gaat.</param>
        /// <returns>Retourneert een fout string</returns>
        public string TramVerplaatsen(Tram tram, Spoor spoorVan, Sector sectorVan, Spoor spoorNaar, Sector sectorNaar)
        {
            //Todo: Als spoorVan en sectorVan niet null zijn dan moet er nog worden gekeken of de tram überhaupt wel verplaatst mag worden.
            string result = " ";

            if (sectorVan != null && spoorVan != null)
            {
                if (sectorVan.Tram.TramNummer == tram.TramNummer)
                {
                    if (spoorVan.Sectoren[0].SpoorNummer == sectorVan.SpoorNummer)
                    {
                        spoorVan.VeranderSectorStatus(sectorVan, SectorStatus.leeg);
                        sectorVan.Status = SectorStatus.leeg;
                        spoorVan.ZetSpoorStatus();
                        dc.UpdateSector(sectorVan);
                        dc.UpdateSpoor(spoorVan);
                    }
                    else
                    {
                        return("tram kan niet verplaatst worden omdat die niet op de eerste sector staat!");
                    }
                }
            }

            if (spoorNaar != null && sectorNaar != null)
            {
                if (spoorNaar.HeeftSector(sectorNaar))
                {
                    sectorNaar.Status     = SectorStatus.bezet;
                    sectorNaar.Tram       = tram;
                    spoorNaar.SpoorStatus = SpoorStatus.InGebruik;
                    dc.UpdateSector(sectorNaar);
                    dc.UpdateSpoor(spoorNaar);
                }
                else
                {
                    return("Sector niet gevonden bij gegeven spoor!");
                }
            }

            return(result);
        }
        /// <summary>
        /// Deelt de tram in op een leeg reparatiespoor.
        /// </summary>
        /// <param name="tram">De tram die ingedeelt moet worden.</param>
        /// <param name="dc">De databasecontroller die verbinding maakt met de database</param>
        public void DeelTramInOpReparatieSpoor(Tram tram, DatabaseController dc)
        {
            Spoor  repSpoor   = VerkrijgVrijReparatieSpoor();       //Verkrijgt een leeg reparatie spoor.
            Sector legeSector = repSpoor.VerkrijgEerstLegeSector(); //Verkrijgt een lege sector op het verkregen schoonmaakspoor.

            if (legeSector != null)                                 //indien legesector bestaat deel de tram dan in op die sector.
            {
                legeSector.Tram   = tram;
                legeSector.Status = SectorStatus.bezet;
                dc.UpdateSector(legeSector);
                tram.Status = TramStatus.Geparkeerd;
                dc.UpdateTram(tram);
            }
            else //wanneer legesector niet bestaat deel de tram dan in volgens het normaal indelingsalgoritme.
            {
                DeelTramInVolgensAlgoritme(tram, dc);
            }
        }
 public void DeelTramInOpReservering(Tram tram, DatabaseController dc)
 {
     foreach (Reservering reservering in dc.GetAllReservering())
     {
         if (reservering.Tram.TramNummer == tram.TramNummer)
         {
             foreach (Spoor spoor in alleSporen)
             {
                 if (reservering.Sector.SpoorNummer == spoor.SpoorNummer && reservering.Sector.Status == SectorStatus.leeg)
                 {
                     spoor.SpoorStatus = SpoorStatus.InGebruik;
                     dc.UpdateSpoor(spoor);
                     reservering.Sector.Status = SectorStatus.bezet;
                     reservering.Sector.Tram   = tram;
                     dc.UpdateSector(reservering.Sector);
                     tram.Status = TramStatus.Geparkeerd;
                     dc.UpdateTram(tram);
                 }
             }
         }
     }
 }