using data.RemoteData.DAO;
using domain.Models;
using System.Collections.Generic;

namespace data.Repository
{
    // Интерфейс для репозитория работы с посещаемостью.
    public interface IPresenceRepository
    {
        // Метод для добавления записи о посещении.
        void AddPresence(PresenceLocalEntity presence);

        // Метод для получения общей посещаемости группы.
        public GroupPresenceSummary GetGeneralPresenceForGroup(int groupId);

        // Метод для получения посещаемости по группе.
        List<PresenceLocalEntity> GetPresenceByGroup(int groupId);

        // Метод для получения посещаемости группы в виде DAO объектов.
        List<PresenceDao> GetAttendanceByGroup(int groupId);

        // Метод для получения посещаемости по группе и дате.
        List<PresenceLocalEntity> GetPresenceByGroupAndDate(int groupId, DateTime date);

        // Метод для получения последней даты посещаемости для группы.
        DateOnly? GetLastDateByGroupId(int groupId);

        // Метод для сохранения посещаемости для группы.
        void SavePresence(List<PresenceLocalEntity> presences);

        // Метод для обновления посещаемости для пользователя в указанном интервале уроков.
        bool UpdateAttention(Guid UserGuid, int groupId, int firstLesson, int lastLesson, DateOnly date, bool isAttendance);

        // Метод для пометки пользователя как отсутствующего в указанные уроки.
        void MarkUserAsAbsent(Guid userGuid, int firstLessonNumber, int lastLessonNumber);
    }
}
