using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using SZUAbsolventenverein.Module.EventRegistration.Models;
namespace SZUAbsolventenverein.Module.EventRegistration.Services
{
///
/// Methods for managing events and their responses
///
public interface IEventRegistrationService
{
///
/// Alle Events eines Moduls abrufen
///
/// das aufrufende Modul
/// Liste aller Veranstaltungen
Task> GetEventsAsync(int ModuleId);
///
/// Ein bestimmtes Event abrufen
///
/// das aufzurufende Event
/// das aufrufende Modul
/// Das Event selbst
Task GetEventAsync(int EventId, int ModuleId);
///
/// Ein neues Event anlegen
///
/// das anzulegende Event
/// das angelegte Event
Task AddEventAsync(Event NewEvent);
///
/// Ändern eines bestehenden Events
///
/// Das Eventobjekt mit aktualisierte Event
/// das gespeicherte Event
Task UpdateEventAsync(Event UpdatedEvent);
///
/// Löschen eines Events
///
/// das zu löschende Event
/// das aufrufende Modul
///
Task DeleteEventAsync(int EventId, int ModuleId);
///
/// Eine neue Antwort zu einem Event hinzufügen
///
/// die Antwort
/// die gespeicherte Antwort
Task AddResponseAsync(Response Response);
///
/// Eine bestehende Antwort zu einem Event aktualisieren
///
/// die neue Antwort
/// die gespeicherte neue Antwort
Task UpdateResponseAsync(Response Response);
///
/// Details zu einem Event abrufen (Event + Antwort vom auktuellen Benutzer)
///
/// das aufzurufende Event
/// das aufrufende Modul
/// Tuple aus Event und Antwort
Task<(Event, Response)> GetEventDetails(int EventId, int ModuleId);
///
/// Alle Antworten zu einem Event abrufen
///
/// das Event, dessen Antworten geladen werden sollen
/// das aufrufende Modul
/// Liste aller Antworten auf das Event
Task> GetEventResponses(int EventId, int ModuleId);
///
/// 10 Antworten eines Events abrufen, welche gewichtet zurückgeliefert werden
///
/// das aufzurufende Event
/// das aufrufende Modul
/// Liste mit 10
Task> GetRecommendedEventResponses(int EventId, int MouleId);
}
}