using Koogle.Application.DTOs;
using Koogle.Domain.Enums;
using Microsoft.AspNetCore.Http;
namespace Koogle.Application.Interfaces;
///
/// Service for managing club GIFs and submission tokens.
///
public interface IClubGifService
{
// GIF Management
Task GetByIdAsync(Guid id, CancellationToken ct = default);
Task> GetByClubAsync(Guid clubId, bool includePending = false, CancellationToken ct = default);
Task UploadAsync(Guid clubId, IFormFile file, CreateClubGifDto dto, CancellationToken ct = default);
Task ImportFromUrlAsync(Guid clubId, ImportClubGifDto dto, CancellationToken ct = default);
Task UpdateAsync(UpdateClubGifDto dto, CancellationToken ct = default);
Task DeleteAsync(Guid id, CancellationToken ct = default);
// Approval
Task ApproveAsync(Guid id, CancellationToken ct = default);
Task RejectAsync(Guid id, CancellationToken ct = default);
// Playback
Task SelectRandomForEventAsync(Guid clubId, ThrowEventType eventType, CancellationToken ct = default);
Task> GetPreloadGifsAsync(Guid clubId, CancellationToken ct = default);
// Rating
Task RateAsync(Guid gifId, Guid userProfileId, int value, CancellationToken ct = default);
// Submission Tokens
Task CreateSubmissionTokenAsync(CreateGifSubmissionTokenDto dto, CancellationToken ct = default);
Task GetSubmissionTokenAsync(string token, CancellationToken ct = default);
Task> GetSubmissionTokensByClubAsync(Guid clubId, CancellationToken ct = default);
Task DeleteSubmissionTokenAsync(Guid id, CancellationToken ct = default);
// Anonymous Submission
Task SubmitAnonymousAsync(string token, IFormFile file, string name, CancellationToken ct = default);
Task SubmitAnonymousFromUrlAsync(string token, string url, string name, CancellationToken ct = default);
// Template Seeding
///
/// Seeds template GIFs from club-template folder to a club.
/// Should be called after creating a new club.
///
Task SeedTemplateGifsAsync(Guid clubId, CancellationToken ct = default);
}