using System; using System.Collections.Generic; using System.Threading.Tasks; using Itenso.TimePeriod; using Wino.Core.Domain.Entities.Calendar; using Wino.Core.Domain.Models.Calendar; namespace Wino.Core.Domain.Interfaces; public interface ICalendarService { Task> GetAccountCalendarsAsync(Guid accountId); Task GetAccountCalendarAsync(Guid accountCalendarId); Task DeleteCalendarItemAsync(Guid calendarItemId); Task DeleteCalendarItemAsync(string calendarRemoteEventId, Guid calendarId); Task DeleteAccountCalendarAsync(AccountCalendar accountCalendar); Task InsertAccountCalendarAsync(AccountCalendar accountCalendar); Task UpdateAccountCalendarAsync(AccountCalendar accountCalendar); Task CreateNewCalendarItemAsync(CalendarItem calendarItem, List attendees); /// /// Retrieves calendar events for a given calendar within the specified time period. /// /// The calendar to retrieve events from. /// The time period to query events for. /// List of calendar items including regular events and recurring event occurrences. Task> GetCalendarEventsAsync(IAccountCalendar calendar, ITimePeriod period); /// /// Expands a recurring calendar item to check if any of its occurrences fall within the given periods. /// /// The calendar item to expand (can be recurring or non-recurring). /// The list of periods to check against. /// List of calendar items (either the original item or expanded recurrence instances) that fall within the periods. Task> GetExpandedRecurringEventsForPeriodsAsync(CalendarItem calendarItem, IEnumerable periods); Task GetCalendarItemAsync(Guid accountCalendarId, string remoteEventId); Task UpdateCalendarDeltaSynchronizationToken(Guid calendarId, string deltaToken); /// /// Returns the correct calendar item based on the target details. /// /// Target details. Task GetCalendarItemTargetAsync(CalendarItemTarget targetDetails); Task GetCalendarItemAsync(Guid id); Task> GetAttendeesAsync(Guid calendarEventTrackingId); Task> ManageEventAttendeesAsync(Guid calendarItemId, List allAttendees); Task UpdateCalendarItemAsync(CalendarItem calendarItem, List attendees); Task> GetRemindersAsync(Guid calendarItemId); Task SaveRemindersAsync(Guid calendarItemId, List reminders); /// /// Gets predefined reminder options in minutes (1 Hour, 30 Min, 15 Min, 5 Min, 1 Min). /// int[] GetPredefinedReminderMinutes(); }