private static int _staleCount = 4;
private static int _staleCountNext = 4;
private static int _activatedThisMonth = 0;
private static int _includedListing = 5;
private static int _excessListing = 0;
private static int _excessListingNext = 0;
public static void Main()
var listing1 = new Listing(new DateTime(2022, 03, 26));
var listing2 = new Listing(new DateTime(2022, 03, 26));
var listing3 = new Listing(new DateTime(2022, 03, 26));
var listing4 = new Listing(new DateTime(2022, 03, 26));
var listing5 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing5);
var listing6 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing6);
var listing7 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing7);
ActivateListing(listing6);
ActivateListing(listing1);
ActivateListing(listing1);
var listing8 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing8);
var listing9 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing9);
var listing10 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing10);
var listing11 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing11);
var listing12 = new Listing(new DateTime(2022, 04, 26));
ActivateListing(listing12);
public static void PrintStats(string notes)
Console.WriteLine($"{notes}\t\t Listing included: {_includedListing}\t Used this month: {_staleCount + _activatedThisMonth}\t Excess: {_excessListing}\t Stale: {_staleCount}\t Activated this Month: {_activatedThisMonth}\t Stale count next month: {_staleCountNext}\t Excess listing next month: {_excessListingNext}");
public static string CheckExcessCharge()
if(_staleCount + _activatedThisMonth + 1 > _includedListing + _excessListing)
return "No excess charge";
public static string RemoveListing(Listing listing)
_staleCountNext = _staleCountNext > 0? _staleCountNext -1 : 0;
_excessListingNext = _excessListingNext > 0? _excessListingNext - 1 : 0;
if(listing.Status == "DELETED")
_staleCount = _staleCount > 0? _staleCount -1 : 0;
listing.Status = "DELETED";
public static string ActivateListing(Listing listing)
if (++_staleCountNext > _includedListing)
if(listing.IsActive && listing.Status == "DELETED")
return "No excess charge";
if(listing.Status == "DELETED")
listing.ReActivationDate = DateTime.Now;
return "Excess charge applied";
return "No excess charge";
public static bool IsAboveThreshold()
return _staleCount + _activatedThisMonth > _includedListing + _excessListing;
public Listing(DateTime activeDate)
public DateTime? ActiveDate {get; set;}
public DateTime? ReActivationDate {get;set;}
public string Status {get;set;}
public bool IsStale => ActiveDate < new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) || ReActivationDate < new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
public bool IsActive => ActiveDate >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) || ReActivationDate >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);