namespace AIStudio.Assistants.BeyondFactsLab;
///
/// A preparation in the BeyondFacts Lab: one event, for which a person works through the steps of the lab.
///
///
/// The lab stores it as project.json in the folder of the preparation. Everything else the preparation
/// holds lies in files beside it, which the lab finds by the ID of the preparation, never by a stored path.
///
public sealed class BflProject
{
///
/// The version of the stored form this version of AI Studio writes.
///
///
/// A preparation of a newer form is listed but neither opened nor written, so that an older version of
/// AI Studio cannot lose what a newer one stored. Raise it with every field a released version does not
/// know yet: that version refuses fields it does not know, and only the higher number tells the person
/// that a newer version stored the preparation.
///
public const int CURRENT_SCHEMA_VERSION = 1;
///
/// Gets or sets the version of the stored form.
///
public int SchemaVersion { get; set; } = CURRENT_SCHEMA_VERSION;
///
/// Gets or sets the ID of the preparation, which is also the name of its folder.
///
public Guid ProjectId { get; set; }
///
/// Gets or sets the name the person gave the preparation.
///
public string Name { get; set; } = string.Empty;
///
/// Gets or sets when the preparation was created.
///
public DateTimeOffset CreatedAtUtc { get; set; }
///
/// Gets or sets when the preparation was changed last.
///
public DateTimeOffset ModifiedAtUtc { get; set; }
///
/// Gets or sets when the person marked the event as having taken place, or null while it has not.
///
public DateTimeOffset? HappenedAtUtc { get; set; }
///
/// Gets or sets the step the person looked at last, where the lab opens the preparation again.
///
public BflStep CurrentStep { get; set; } = BflStep.FRAMEWORK;
///
/// Gets or sets the ID of the provider the person chose for the chats of the preparation, or an empty string while
/// they chose none.
///
///
/// The lab checks the provider again whenever it opens the preparation: an organization may have prohibited it
/// meanwhile, or the person may have lowered its confidence.
///
public string ProviderId { get; set; } = string.Empty;
}