using System.Collections.Generic;
List<TempSuspendHIstory> history = new List<TempSuspendHIstory>
new TempSuspendHIstory { StartDate = new DateTime(2025, 1, 1), EndDate = new DateTime(2025, 1, 30) },
new TempSuspendHIstory { StartDate = new DateTime(2025, 3, 1), EndDate = new DateTime(2025, 3, 30) }
SuspensionManager manager = new SuspensionManager(history);
DateTime ErStartdat = manager.GetEarliestStartDate();
Console.WriteLine($"allowed start date: {ErStartdat:yyyy-MM-dd}");
Console.Write("Enter start date (yyyy-MM-dd): ");
if (DateTime.TryParse(Console.ReadLine(), out startDate) && startDate >= ErStartdat)
Console.WriteLine($"Start date must be on or after {ErStartdat:yyyy-MM-dd}");
DateTime mxenddate = manager.GetMaxEndDate(startDate);
Console.WriteLine($"Maximum allowed end date for {startDate:yyyy-MM-dd}: {mxenddate:yyyy-MM-dd}");
Console.Write("Enter end date (yyyy-MM-dd):");
if (DateTime.TryParse(Console.ReadLine(), out endDate) && endDate <= mxenddate)
Console.WriteLine($"Error: End date must be on or before {mxenddate:yyyy-MM-dd}");
Console.WriteLine($"Suspension from {startDate:yyyy-MM-dd} to {endDate:yyyy-MM-dd} is valid!");
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
private const int MaxSuspendDaysPerYear = 180;
private List<TempSuspendHIstory> SuspendHistoryList;
public SuspensionManager(List<TempSuspendHIstory> suspendHistoryList)
SuspendHistoryList = suspendHistoryList ?? new List<TempSuspendHIstory>();
public DateTime GetEarliestStartDate()
DateTime today = DateTime.Today;
DateTime oneDayAfterToday = today.AddDays(1);
var lastHistory = SuspendHistoryList.OrderByDescending(s => s.EndDate).FirstOrDefault();
int usedSuspendDays = SuspendHistoryList
.Where(s => s.StartDate.Year == today.Year)
.Sum(s => (s.EndDate - s.StartDate).Days + 1);
if (usedSuspendDays >= MaxSuspendDaysPerYear)
return lastHistory.StartDate.AddYears(1);
public DateTime GetMaxEndDate(DateTime startDate)
int usedSuspendDays = SuspendHistoryList
.Where(s => s.StartDate.Year == startDate.Year)
.Sum(s => (s.EndDate - s.StartDate).Days + 1);
int remainingDays = MaxSuspendDaysPerYear - usedSuspendDays;
return startDate.AddDays(remainingDays - 1);