using Core.Entities;
namespace WebApp.Services;
public interface INotesService
{
///
/// Gets all notes, optionally including deleted notes.
///
/// If true, includes soft-deleted notes. Defaults to false.
Task> GetNotesAsync(bool includeDeleted = false);
///
/// Gets a single note by ID.
///
Task GetNoteAsync(int id);
///
/// Gets a page-specific note by page identifier.
///
/// The page identifier (e.g., "Teams", "Registration")
/// The note with title "#{pageIdentifier}" or null if not found
Task GetPageNoteAsync(string pageIdentifier);
///
/// Gets the system note for a student, or null if none exists.
///
Task GetStudentNoteAsync(int studentId);
///
/// Gets system notes for the given student ids, keyed by student id.
///
Task> GetStudentNotesAsync(IEnumerable studentIds);
///
/// Soft-deletes system notes for the given student ids.
///
Task SoftDeleteStudentNotesAsync(IEnumerable studentIds, CancellationToken cancellationToken = default);
///
/// Distinct Field names from student note ## Imported fields tables.
///
Task> GetImportedFieldNamesAsync(CancellationToken cancellationToken = default);
///
/// Gets all history entries for a note.
///
Task> GetNoteHistoryAsync(int noteId);
///
/// Creates a new note and initial history entry.
///
Task CreateNoteAsync(Note note);
///
/// Updates an existing note and creates a history entry.
///
Task UpdateNoteAsync(Note note);
///
/// Deletes a note and creates a deletion history entry.
///
Task DeleteNoteAsync(int id);
///
/// Gets up to 3 pinned notes, excluding page notes and deleted notes, ordered by most recently updated.
///
Task> GetPinnedNotesAsync();
///
/// Toggles the pin status of a note, enforcing the 3-note limit.
///
Task TogglePinNoteAsync(int noteId);
///
/// Gets all soft-deleted notes.
///
Task> GetDeletedNotesAsync();
///
/// Restores a soft-deleted note.
///
Task RestoreNoteAsync(int noteId);
}