using HSchool.People;
using HSchool.Server.Api;
using HSchool.Server.Net;
using HSchool.Simulation;
namespace HSchool.Server.Game;
///
/// Work item for one school's worker. The supervisor never touches that school's World;
/// it only posts these.
///
internal abstract record WorkerCommand
{
internal sealed record Open(GameClient Client) : WorkerCommand;
internal sealed record Close(uint PlayerId) : WorkerCommand;
internal sealed record SetRunning(bool Running) : WorkerCommand;
internal sealed record SetSpeed(byte SpeedIndex) : WorkerCommand;
internal sealed record SkipEmpty : WorkerCommand;
internal sealed record Dump(TaskCompletionSource Result) : WorkerCommand;
internal sealed record GetPerson(
string PersonId,
string Locale,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record GetPersonLog(
string PersonId,
string Locale,
PersonLogQuery Query,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record HireStaff(
string PersonId,
string Position,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record AssignSubject(
string PersonId,
string Subject,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record UnassignSubject(
string PersonId,
string Subject,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record PinLesson(
string ClassId,
string Subject,
string RoomId,
int Day,
int Period,
TaskCompletionSource Result) : WorkerCommand;
internal sealed record UnpinLesson(
string ClassId,
string Subject,
int Day,
int Period,
TaskCompletionSource Result) : WorkerCommand;
}