using System.Collections.Generic; using System.Linq; using Itenso.TimePeriod; using Wino.Core.Domain.Enums; namespace Wino.Core.Domain.Models.Calendar { /// /// Represents a range of days in the calendar. /// Usually it's used for day or week, but supports custom ranges. /// public class DayRangeRenderModel { public ITimePeriod Period { get; } public List CalendarDays { get; } = new List(); public List DayHeaders { get; } = new List(); public CalendarRenderOptions CalendarRenderOptions { get; } public DayRangeRenderModel(CalendarRenderOptions calendarRenderOptions) { CalendarRenderOptions = calendarRenderOptions; for (var i = 0; i < CalendarRenderOptions.TotalDayCount; i++) { var representingDate = calendarRenderOptions.DateRange.StartDate.AddDays(i); var calendarDayModel = new CalendarDayModel(representingDate, calendarRenderOptions); CalendarDays.Add(calendarDayModel); } Period = new TimeRange(CalendarDays.First().RepresentingDate, CalendarDays.Last().RepresentingDate.AddDays(1)); // Create day headers based on culture info. for (var i = 0; i < 24; i++) { var representingDate = calendarRenderOptions.DateRange.StartDate.Date.AddHours(i); string dayHeader = calendarRenderOptions.CalendarSettings.DayHeaderDisplayType switch { DayHeaderDisplayType.TwelveHour => representingDate.ToString("h tt", calendarRenderOptions.CalendarSettings.CultureInfo), DayHeaderDisplayType.TwentyFourHour => representingDate.ToString("HH", calendarRenderOptions.CalendarSettings.CultureInfo), _ => "N/A" }; DayHeaders.Add(new DayHeaderRenderModel(dayHeader, calendarRenderOptions.CalendarSettings.HourHeight)); } } } }