public IPopulationCenters Upgrade(ICivilization civilization, IPopulationCenters center)
        {
            IPopulationCenters upgrade = null;
            if (!civilization.RegionsOwned.Last().CanSupportAdditionalPopulationCenters()) return upgrade; // as long as the last region has available centers we can keep going

            if (!center.GetType().Name.ToLower().Equals("metropolis"))
            {
                upgrade = PopulationCenterFactory.Get(center.GetType().Name);
            }
            else // we have a metropolis. Generate a new Hamlet now.
            {
                return GenerateSingle(civilization);
            }

            return CreateCenter(civilization, upgrade);
        }
 private IPopulationCenters CreateCenter(ICivilization civilization, IPopulationCenters center)
 {
     center.Id = Random.Next(0, 423645245);
     center.Name = Names.SingleName(CoreEnums.Word.HumanPlace); // TODO: named according to race
     center.Description = "DESCRIPTION";
     center.Civilization = civilization;
     center.Region = civilization.RegionsOwned.First(r => r.CanSupportAdditionalPopulationCenters());
     center.Population = new List<IPerson>();
     center.HasPort = false; // TODO: hard coded
     center.HasMarket = true; // TODO: hard coded
     return center;
 }