/// <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>
         * ///
         * /// </summary>
         * /// <param name="tramNummer"></param>
         * /// <param name="spoorNummer"></param>
         * /// <param name="sectorNummer"></param>
         * public string TramVerplaatsen(int tramnummer, int spoornummer, int sectorID_naar) //TODO optimaliseren/verkleinen, we hebben daarvoor al methodes in deze klassen zitten.
         * {
         *  Sector van = null;
         *  Spoor spoorvan = null;
         *
         *  foreach (Spoor spoor in sporen)
         *  {
         *      foreach (Sector sector in spoor.Sectoren)
         *      {
         *          if (sector.Tram == null)
         *          {
         *              continue;//to next foreach loop, aka skip the next if-statement
         *          }
         *          if (sector.Tram.TramNummer == tramnummer)
         *          {
         *              van = sector;
         *              spoorvan = spoor;
         *              van.Status = SectorStatus.leeg;
         *          }
         *      }
         *  }
         *
         *  if (van == null)
         *  {
         *      return "Sector 'van' kon niet gevonden worden aan de hand van dit tramnummer.\r\nWaarschijnlijk staat deze tram niet op een sector momenteel.";
         *  }
         *
         *  if (spoorvan == null)
         *  {
         *      return "Kon spoorvan niet vinden.";
         *  }
         *
         *  Sector naar = null;
         *
         *  foreach (Spoor spoor in sporen)
         *  {
         *      foreach (Sector sector in spoor.Sectoren)
         *      {
         *          if (sector.Id == sectorID_naar)
         *          {
         *              naar = sector;
         *              naar.Status = SectorStatus.bezet;
         *          }
         *      }
         *  }
         *
         *  if (naar == null)
         *  {
         *      return "Sector 'naar' kon niet gevonden worden.";
         *  }
         *
         *  string result = "";
         *
         *
         *  van.Tram = null;
         *  if (dc.UpdateSector(van))
         *  {
         *      result += "Updaten van de oude sector is gelukt. ";
         *  }
         *  else
         *  {
         *      result += "Kon de oude sector niet updaten. ";
         *  }
         *
         *  Tram t = null;
         *  foreach (Tram tram in trams)
         *  {
         *      if (tram.TramNummer == tramnummer)
         *      {
         *          t = tram;
         *      }
         *  }
         *  if (t == null)
         *  {
         *      return "Kon tram met tramnummer " + tramnummer + " niet vinden.";
         *  }
         *
         *  naar.Tram = t;
         *  if (dc.UpdateSector(naar))
         *  {
         *      result += "Updaten van de nieuwe sector is gelukt.";
         *  }
         *  else
         *  {
         *      result += "Kon de nieuwe sector niet updaten.";
         *  }
         *
         *  Spoor spoor_naar = null;
         *
         *  foreach (Spoor spoor in sporen)
         *  {
         *      if (spoor.SpoorNummer == spoornummer)
         *      {
         *          spoor_naar = spoor;
         *      }
         *  }
         *
         *  spoorvan.SpoorStatus = SpoorStatus.Leeg;
         *
         *  foreach (Sector sector in spoorvan.Sectoren)
         *  {
         *      if (sector.Status == SectorStatus.bezet)
         *      {
         *          spoorvan.SpoorStatus = SpoorStatus.InGebruik;
         *      }
         *  }
         *
         *  spoor_naar.SpoorStatus = SpoorStatus.InGebruik;
         *
         *  dc.UpdateSector(naar);
         *  dc.UpdateSector(van);
         *  dc.UpdateSpoor(spoorvan);
         *  dc.UpdateSpoor(spoor_naar);
         *
         *  return result;
         * }
         */

        /// <summary>
        ///
        /// </summary>
        /// <param name="spoorNummer"></param>
        public string ToggleSpoor(Spoor spoor) //TODO: kan nog geoptimaliseerd/verkleint worden. In plaats van spoornummer Spoor parameter zelf en de GetSpoorByID method aanroepen met tramnummer.
        {
            string p_result;

            // Als de sector niet gevonden is, return error
            if (spoor == null)
            {
                return("Error, kon sector niet vinden");
            }

            // Toggle het spoor
            if (spoor.SpoorStatus == SpoorStatus.InGebruik)
            {
                p_result          = "leeg";
                spoor.SpoorStatus = SpoorStatus.Leeg;
            }
            else
            {
                p_result          = "in gebruik";
                spoor.SpoorStatus = SpoorStatus.InGebruik;
            }

            if (dc.UpdateSpoor(spoor))
            {
                return("Spoorstatus is nu " + p_result);
            }
            else
            {
                return("Kon spoor niet updaten.");
            }
        }
 /// <summary>
 /// Verkrijgt een sector van een specifiek spoor.
 /// </summary>
 /// <param name="spoor">Het spoor waar de sector zich in moet bevinden</param>
 /// <param name="sectorID">Het id van de sector die gevonden moet worden</param>
 /// <returns>Retourneert een sector wanneer die gevonden is op het gegeven spoor.</returns>
 public Sector GetSectorByID(Spoor spoor, int sectorID)
 {
     Update();
     foreach (Sector s in spoor.Sectoren)
     {
         if (s.Id == sectorID)
         {
             return(s);
         }
     }
     return(null);
 }
        /// <summary>
        /// Reserveert een sector voor een tram.
        /// </summary>
        /// <param name="sector">De sector die gereserveerd moet worden.</param>
        /// <param name="tram">De tram waarvoor de reservering wordt gemaakt.</param>
        /// <returns>Een string met het bericht of iets is gelukt of niet.</returns>
        public string SectorReserveren(Sector sector, Tram tram) //TODO optimaliseren/verkleinen, we hebben hiervoor al methodes in deze klassen zitten.
        {
            Reservering r = new Reservering(tram, sector);

            if (dc.AddReservering(r))
            {
                Spoor spoor = GetSpoorByNummer(sector.SpoorNummer);
                spoor.SpoorStatus = SpoorStatus.InGebruik;
                dc.UpdateSpoor(spoor);
                return("Reservering voor tramnummer " + tram.TramNummer + " toegevoegd op sector met ID " + sector.Id);
            }
            else
            {
                return("Kon reservering voor tramnummer " + tram.TramNummer + " niet toevoegen op sector met ID " +
                       sector.Id);
            }
        }
        /// <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);
            }
        }
        /// <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>
        /// Update alle spoor waarden in de database voor het gegeven spoor id.
        /// </summary>
        /// <param name="spoor">Het spoor dat moet worden geüpdate</param>
        /// <returns></returns>
        public bool UpdateSpoor(Spoor spoor) //Moet nog worden getest
        {
            try
            {
                string sql = "UPDATE SPOOR SET STATUS = :status, TYPE = :type"
                             + " WHERE NUMMER = :nummer";

                OracleCommand command = MaakOracleCommand(sql);

                command.Parameters.Add(":status", Convert.ToInt32(spoor.SpoorStatus));
                command.Parameters.Add(":tramType", Convert.ToInt32(spoor.SpoorType));
                command.Parameters.Add(":nummer", spoor.SpoorNummer);

                return(VoerNonQueryUit(command));
            }
            catch
            {
                return(false);
            }
            finally
            {
                verbinding.Close();
            }
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="spoorNummer"></param>
 /// <param name="sectorNummer"></param>
 public void TramPlaatsen(Tram tram, Spoor spoor, Sector sector)
 {
 }