• + 0 comments
     internal class BookReturn
     {
         public DateTime ReturnedOn { get; set; }
         public DateTime DueOn { get; set; }
    
         public BookReturn(string returnedOn, string dueOn)
         {
             var returnedOnValues = returnedOn.Split(" ").Select(ch => int.Parse(ch)).ToArray();
             var dueOnValues = dueOn.Split(" ").Select(ch => int.Parse(ch)).ToArray();
    
             ReturnedOn = new DateTime(returnedOnValues[2], returnedOnValues[1], returnedOnValues[0]);
             DueOn = new DateTime(dueOnValues[2], dueOnValues[1], dueOnValues[0]);
    
         }
    
         public BookReturn(int d1, int m1, int y1, int d2, int m2, int y2)
         {
             ReturnedOn = new DateTime(y1, m1, d1);
             DueOn = new DateTime(y2, m2, d2);
         }
    
         public bool IsLateWithinSameYear => ReturnedOn.Year == DueOn.Year;
    
         public bool IsLateWithinSameMonth => IsLateWithinSameYear && ReturnedOn.Month == DueOn.Month;
    
         public bool IsLateMoreThanAYear => ReturnedOn.Year != DueOn.Year;
    
         public bool IsReturnedOnTime => ReturnedOn.Date <= DueOn.Date;
    
         public int LateFee => Math.Abs(CalculateFee());
    
         private int CalculateFee()
         {
             if (IsReturnedOnTime)
                 return 0;
    
             if (IsLateWithinSameMonth)
             {
                 return 15 * (DueOn.Date - ReturnedOn.Date).Days;
             }
    
             if (IsLateWithinSameYear)
             {
                 return 500 * (DueOn.Month - ReturnedOn.Month);
             }
    
             if (IsLateMoreThanAYear)
             {
                 return 10000;
             }
    
             return 0;
         }
     }