using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Walks;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von lokalen Push-Nachrichten ermöglicht
///
public interface ILocalPushNotificationService
{
///
/// Hinzufügen einer Erinnerung für einen Walk
///
/// Modus für die app
/// Walk für den eine Erinnerung erstellt werden soll
/// Titel der für die Start-Erinnerung angezeigt werden soll
/// Beschreibung die für die Start-Erinnerung angezeigt werden soll
/// Titel der für die End-Erinnerung angezeigt werden soll
/// Beschreibung die für die End-Erinnerung angezeigt werden soll
/// Task
Task AddReminderAsycn(AppMode appMode, Walk walk, string titleStart, string descriptionStart, string titleEnd, string descriptionEnd);
///
/// Hinzufügen einer Erinnerung für einen Walk
///
/// Modus für die app
/// Walk für den eine Erinnerung erstellt werden soll
/// Titel der für die Start-Erinnerung angezeigt werden soll
/// Beschreibung die für die Start-Erinnerung angezeigt werden soll
/// Titel der für die End-Erinnerung angezeigt werden soll
/// Beschreibung die für die End-Erinnerung angezeigt werden soll
/// Task
Task AddReminderAsycn(AppMode appMode, WalkWithNames walk, string titleStart, string descriptionStart, string titleEnd, string descriptionEnd);
///
/// Hinzufügen einer Erinnerung für eine Öffentliche Anfrage
///
/// Modus für die app
/// Öffentliche Anfrage für die eine Erinnerung erstellt werden soll
/// Titel der für die Erinnerung angezeigt werden soll
/// Beschreibung die für die Erinnerung angezeigt werden soll
/// Wann soll die Erinnerung angezeigt werden?
/// Task
Task AddReminderAsycn(AppMode appMode, PublicWalkRequest reuqest, string title, string description, DateTime notifyTime);
///
/// Stornieren einer Erinnerung
///
/// Id der Erinnerung
/// true wenn erfolgreich, false sonst
Task CancelAsync(int id);
///
/// Löschen aller Notifications
///
/// Task
Task RemoveAllAsync();
///
/// Entfernen von Notifications die abgelaufen sind und eventuell nicht angezeigt wurden
///
/// Anzahl entfernte Requests
Task RemoveOutdatedAsync();
///
/// Gibt zurück ob für eine Id schon eine Notification existiert
///
/// Id der Notification
/// true wenn existiert, false sonst
Task NotificationExistsAsync(int notificationId);
///
/// Hinzufügen einer Erinnerung für einen Walk der noch nicht abgeschlossen wurde.
///
/// Modus für die app
/// Walk für den eine Erinnerung erstellt werden soll
/// Titel der angezeigt werden soll
/// Beschreibung die angezeigt werden soll
/// Minuten die hinzugefügt werden sollen, damit nicht alle gleichzeitig kommen
/// Task
Task AddCompleteReminderAsycn(AppMode appMode, Walk walk, string title, string description, int minutesToAdd);
Task TestWalkAsycn(AppMode appMode, Walk walk, string title, string description, DateTime notifyTime);
Task TestPublicWalkRequestAsycn(AppMode appMode, PublicWalkRequest request, string title, string description, DateTime notifyTime);
}
}