using System;
using System.Linq;
using Demo.Data.LocalData;
using Demo.Data.LocalData.Entity;
using Demo.Data.Repository;
using Demo.Domain.Models;

namespace Demo.Domain.UseCase
{
    public class UseCaseGeneratePresence
    {
        private readonly AttendanceRepositoryImpl _attendanceRepo;

        // Конструктор с параметрами для инъекции зависимостей
        public UseCaseGeneratePresence(AttendanceRepositoryImpl attendanceRepo)
        {
            _attendanceRepo = attendanceRepo ?? throw new ArgumentNullException(nameof(attendanceRepo));
        }

        // Генерация посещаемости на текущий день
        public void GeneratePresenceForDay(int firstLessonNumber, int lastLessonNumber, int groupId, DateOnly currentDate)
        {
            // Получаем пользователей группы из статических данных
            var users = LocalStaticData.Users.Where(u => u.GroupID == groupId).ToList();
            if (users.Count == 0)
            {
                Console.WriteLine($"Не найдено пользователей для группы с ID {groupId}");
                return;
            }

            for (int lessonNumber = firstLessonNumber; lessonNumber <= lastLessonNumber; lessonNumber++)
            {
                foreach (var user in users)
                {
                    var attendance = new Attendance
                    {
                        UserGuid = user.Guid,
                        Date = currentDate,
                        LessonNumber = lessonNumber,
                        IsPresent = true // По умолчанию отмечаем всех как присутствующих
                    };
                    _attendanceRepo.AddAttendance(attendance); // Добавляем запись посещаемости в репозиторий
                }
            }
        }

        // Генерация посещаемости на неделю
        public void GeneratePresenceForWeek(int firstLessonNumber, int lastLessonNumber, int groupId, DateOnly startDate)
        {
            for (int i = 0; i < 7; i++) // Генерируем посещаемость на каждый день недели
            {
                var currentDate = startDate.AddDays(i);
                GeneratePresenceForDay(firstLessonNumber, lastLessonNumber, groupId, currentDate);
            }
        }
    }
}
