using System;
using System.Collections.Generic;
using System.Text;
namespace Lab5.TouristInformationCenter
{
///
/// Class used to store multiple museums in one place
///
class MuseumsRegister
{
private MuseumsContainer AllMuseums;
public MuseumsRegister()
{
AllMuseums = new MuseumsContainer();
}
public MuseumsRegister(MuseumsContainer museums)
{
AllMuseums = new MuseumsContainer(museums);
}
///
/// Add one museum to the register.
///
/// Target museum
public void Add(Museum museum)
{
AllMuseums.Add(museum);
}
///
/// The amount of stored museums in the register.
///
/// Museum count
public int Count()
{
return AllMuseums.Count;
}
///
/// Access museum from register by index
///
/// Target index
/// Museum
public Museum GetByIndex(int index)
{
return AllMuseums.Get(index);
}
///
/// Return a list of active museums from the register.
/// A museum is considered active if it is working at least some amount a week.
///
/// Threshold which determines what is active
/// A list of active museums
public MuseumsContainer FilterByActiveMuseums(int threshold)
{
return AllMuseums.FilterByActivity(threshold);
}
///
/// Find museum that work the most days in a week
///
/// Most active museum
public Museum FindMostActiveMuseum()
{
if (AllMuseums.Count == 0)
{
return null;
}
Museum mostActive = AllMuseums.Get(0);
for (int i = 0; i < AllMuseums.Count; i++)
{
Museum museum = AllMuseums.Get(i);
if (museum.Workdays.Count > mostActive.Workdays.Count)
{
mostActive = museum;
}
}
return mostActive;
}
///
/// Find all museums that work the most days in a week
///
///
public MuseumsContainer FindMostActiveMuseums()
{
Museum mostActive = FindMostActiveMuseum();
MuseumsContainer activeMuseums = new MuseumsContainer();
for (int i = 0; i < AllMuseums.Count; i++)
{
Museum museum = AllMuseums.Get(i);
if (museum.Workdays.Count == mostActive.Workdays.Count)
{
activeMuseums.Add(museum);
}
}
return activeMuseums;
}
///
/// Get all of the different types of cities.
///
/// A list of city names
public List GetAllCities()
{
return AllMuseums.GetAllCities();
}
///
/// Filter the museums by city name from register
///
/// Target city
/// A container of museums
public MuseumsContainer FilterByCity(string city)
{
return AllMuseums.FilterByCity(city);
}
///
/// Filter by property "Type".
///
/// Target type
/// A filtered container of museums
public MuseumsContainer FilterByType(string type)
{
return AllMuseums.FilterByType(type);
}
private List GetMuseumNames()
{
List result = new List();
for (int i = 0; i < AllMuseums.Count; i++)
{
Museum museum = AllMuseums.Get(i);
if (!result.Contains(museum.Name))
{
result.Add(museum.Name);
}
}
return result;
}
///
/// Find all museums that have matching names
///
/// A container with museums that have matching names
public MuseumsContainer FindMuseumsWithDuplicateNames()
{
MuseumsContainer result = new MuseumsContainer();
List names = GetMuseumNames();
foreach (string name in names)
{
MuseumsContainer museumsByName = AllMuseums.FilterByName(name);
if (museumsByName.Count <= 1) continue;
for (int i = 0; i < museumsByName.Count; i++)
{
result.Add(museumsByName.Get(i));
}
}
return result;
}
}
}