using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Dto.Common;
using gehGassiApp.Domain.Advertisements;
using gehGassiApp.Domain.Common;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der alle Funktionen rund um Werbungen zur Verfügung stellt
///
public interface IAdvertisementService
{
///
/// Holen der Liste der Werbungs-Kategorien welche online sind
///
/// gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetCategoriesOnlineAsync(string language, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von ablaufenden Werbungen zurück, welche in der Nähe sind
///
/// Aktuelle Position
/// Wie viele Werbungen sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele Werbungen sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// Akteuller Modus der App
/// Aktuelles Accesstoken
/// Gewünschte Sprache
/// CancellationToken
/// ListCommunicationResult
Task>> GetAdvertisementsNearEndAsync(LocationDto location, int take, int skip, AppMode appMode, string accessToken, string language, CancellationToken token);
///
/// Gibt eine laufende Werbung in gewünschter Sprache zurück
///
/// Id der Werbung
/// gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetRunningAsync(string id, string language, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von Werbungen nach Kategorie zurück
///
/// Id der Kategorie
/// Aktuelle Position
/// Wie viele Werbungen sollen abgerufen werden? -1 Wenn nicht anwenden.
/// Wie viele Werbungen sollen ausgelassen werden? -1 Wenn nicht anwenden.
/// Akteuller Modus der App
/// Aktuelles Accesstoken
/// Gewünschte Sprache
/// CancellationToken
/// ListCommunicationResult
Task>> GetAdvertisementsByCategoryAsync(string categoryId, LocationDto location, int take, int skip, AppMode appMode, string language, string accessToken, CancellationToken token);
}
}