package calendarz;

use Time::Local;

my %cached;
#to build a calendar - you need a cycle for the months for the specific year. 
sub dayscounter { # month is from 1 to 12
	my $month = shift;
	my $year = shift;
	my @montosun;
	
	if (! exists $cached{$year}{$month}){
		my %daycount;
		
		my $daysinmonth = lastday($month,$year);
		#print 	$daysinmonth;
		for my $dom (1..$daysinmonth) {
		my $thetime = timelocal(0, 0, 0, $dom, $month-1, $year);
		my $dayofweek = (localtime($thetime))[6];
			$daycount{$dayofweek}++;
		}
		$daycount{7} = $daycount{0}; delete $daycount{0};
		push @montosun ,$daycount{$_} foreach  (sort keys %daycount);
		$cached{$year}{$month} = \@montosun;
	} else {
		@montosun = @{$cached{$year}{$month}};
	}
	return @montosun;
}

################################################
sub lastday {
   my $month=shift;
   my $year= shift;

   $month--;

   my @days = (31,0,31,30,31,30,31,31,30,31,30,31);

   if($days[$month]){
      return $days[$month];
   } else {
   # It's Feb, test for leap year
      if($year % 4 != 0){
         return 28;
      } elsif($year % 400 == 0){
         return 29;
      } elsif($year % 100 == 0){
         return 28;
      } else {
         return 29;
      }
   } 
}

################################################

1;