using HSchool.Content;
using HSchool.People;
using HSchool.Schedule;
namespace HSchool.Simulation;
/// Turns a school's roster into planner input and back. The worker calls this, not the tick.
public static class SchoolTimetables
{
public static Timetable Build(
DefCatalog catalog,
MapLayout map,
Roster roster,
IReadOnlyList? locked,
int weekDays)
{
ArgumentNullException.ThrowIfNull(catalog);
ArgumentNullException.ThrowIfNull(map);
ArgumentNullException.ThrowIfNull(roster);
var classes = roster.Classes
.Select(item => new PlannerClass(item.Id, item.Year, item.Letter, item.RoomId, item.PupilIds.Count))
.ToArray();
var teachers = roster.People
.Where(person => person.IsStaff && person.Subjects.Count > 0)
.Select(person => new PlannerTeacher(person.Id, person.Subjects))
.ToArray();
return TimetablePlanner.Build(catalog, map, classes, teachers, locked, weekDays);
}
}