
package comics;

require Exporter;
use warnings;

@ISA         = qw(Exporter);
@EXPORT      = qw(list);
@EXPORT_OK   = qw(list);
%EXPORT_TAGS = ( all => \@EXPORT_OK );
$VERSION     = v0.0.6;
$prefix      = '/u/e/n/englet/public/html/comics/';

sub new 
{
	my ($invocant) = shift;
	my ($class   ) = ref($invocant) || $invocant;
	$time = shift;

	my ($self) = {
	  version => $VERSION,
	  list    => create_list(@$time),
	  time    => $time,
	  prefix  => $prefix,
	  @_
	};
	bless  ($self,$class);
	return ($self);
}

sub version()   
{ return ($VERSION);   }

sub list() 
{
	my ($self)  = shift;
	return (%{$self->{list}});
}

sub create_list() 
{
	my %list = ();
	my $folder;
	my(@time) = @_;

	# Comics.com Comics (which require searching for the image name)
	$list{'Dilbert'}             = {url => sprintf('http://dilbert.com/%d-%d-%d',$time[5]+1900,$time[4]+1,$time[3]),  search => qr@.*<a href=\"/strips/comic/....-..-../"><img .*src=\"(.+?)\" alt=@,   fill => 'dilbert', sundayjpg => 1};
	$list{'9 Chickweed Lane'}    = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => '9_chickweed_lane'};
	$list{'B.C.'}                = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'bc', creators => 1};
	$list{'Get Fuzzy'}           = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'get_fuzzy', sundayjpg => 1};
	$list{'Frazz'}               = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'frazz'};
	$list{'Over the Hedge'}      = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'over_the_hedge', sundayjpg => 1};
	#$list{'Peanuts'}             = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'peanuts'};
	$list{'Pearls Before Swine'} = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'pearls_before_swine', sundayjpg => 1};
	$list{'Rose is Rose'}        = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'rose_is_rose'};
	$list{'Speedbump'}           = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'speed_bump', creators => 1};
	$list{'Strange Brew'}        = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'strange_brew', creators => 1};
	$list{'The Other Coast'}     = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'the_other_coast', creators => 1};
	$list{'Wizard of Id'}        = {search => qr@.*<link rel=\"image_src\" href=\"(.+?)\" @, fill => 'wizard_of_id', creators => 1};

	# King Features comics (which require the 'referer')
	$list{'Baby Blues'}             = {url => sprintf('http://est.rbma.com/content/Baby_Blues?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Bizarro'}                = {url => sprintf('http://est.rbma.com/content/Bizarro?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Buckles'}                = {url => sprintf('http://est.rbma.com/content/Buckles?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Curtis'}                 = {url => sprintf('http://est.rbma.com/content/Curtis?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Dennis the Menace'}      = {url => sprintf('http://est.rbma.com/content/Dennis_The_Menace?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Funky Winkerbean'}       = {url => sprintf('http://est.rbma.com/content/Funky_Winkerbean?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Grin and Bear It'}       = {url => sprintf('http://est.rbma.com/content/Grin_and_Bear_It?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Hagar the Horrible'}     = {url => sprintf('http://est.rbma.com/content/Hagar_The_Horrible?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Mallard Fillmore'}       = {url => sprintf('http://est.rbma.com/content/Mallard_Fillmore?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Mother Goose and Grimm'} = {url => sprintf('http://est.rbma.com/content/Mgoose?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Mutts'}                  = {url => sprintf('http://est.rbma.com/content/Mutts?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Rhymes with Orange'}     = {url => sprintf('http://est.rbma.com/content/Rhymes_with_Orange?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Sally Forth'}            = {url => sprintf('http://est.rbma.com/content/Sally_Forth?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Shermans Lagoon'}        = {url => sprintf('http://est.rbma.com/content/Shermans_Lagoon?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Tiger'}                  = {url => sprintf('http://est.rbma.com/content/Tiger?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };
	$list{'Zits'}                   = {url => sprintf('http://est.rbma.com/content/Zits?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };

	# Calvin and Hobbes are repeated from a few years ago
	#$list{'Calvin and Hobbes'} = {url => sprintf('http://images.ucomics.com/comics/ch/%04d/ch%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]),
	#			      file => 'calvinandhobbes'.sprintf('-%04d%02d%02d.gif', $time[5]+1900,$time[4]+1,$time[3]) };

	# ucomics.com comics are easy, because the file names can be determined from the date.
	$list{'Shoe'}                = {url => sprintf('http://images.ucomics.com/comics/tmsho/%04d/tmsho%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	# These old comics really redirect to gocomics.com now (and I have to use that for Sundays).
	#$list{'The Duplex'}          = {url => sprintf('http://images.ucomics.com/comics/dp/%04d/dp%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'For Better or Worse'} = {url => sprintf('http://images.ucomics.com/comics/fb/%04d/fb%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'FoxTrot'}             = {url => sprintf('http://images.ucomics.com/comics/ft/%04d/ft%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Non Sequitur'}        = {url => sprintf('http://images.ucomics.com/comics/nq/%04d/nq%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Ziggy'}               = {url => sprintf('http://images.ucomics.com/comics/zi/%04d/zi%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Garfield'}            = {url => sprintf('http://images.ucomics.com/comics/ga/%04d/ga%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Doonesbury'}          = {url => sprintf('http://images.ucomics.com/comics/db/%04d/db%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };

	# gocomics.com require searching now too.
	$list{'Doonesbury'}          = {url => sprintf('http://www.gocomics.com/doonesbury/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'doonesbury', referer => 'http://www.gocomics.com/'};
	$list{'The Duplex'}          = {url => sprintf('http://www.gocomics.com/duplex/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'theduplex', referer => 'http://www.gocomics.com/'};
	$list{'For Better or Worse'} = {url => sprintf('http://www.gocomics.com/forbetterorforworse/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'forbetterorworse', referer => 'http://www.gocomics.com/'};
	$list{'FoxTrot'}             = {url => sprintf('http://www.gocomics.com/foxtrot/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'foxtrot', referer => 'http://www.gocomics.com/'};
	$list{'Garfield'}            = {url => sprintf('http://www.gocomics.com/garfield/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'garfield', referer => 'http://www.gocomics.com/'};
	$list{'Non Sequitur'}        = {url => sprintf('http://www.gocomics.com/nonsequitur/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'nonsequitur', referer => 'http://www.gocomics.com/'};
	$list{'Peanuts'}             = {url => sprintf('http://www.gocomics.com/peanuts/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'peanuts', referer => 'http://www.gocomics.com/'};
	$list{'Ziggy'}               = {url => sprintf('http://www.gocomics.com/ziggy/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'ziggy', referer => 'http://www.gocomics.com/'};
	$list{'Calvin and Hobbes'}   = {url => sprintf('http://www.gocomics.com/calvinandhobbes/%04d/%02d/%02d',$time[5]+1900,$time[4]+1,$time[3]), search => qr@.*image_src\" href=\"(http://cdn.svcs.c2.uclick.com/.+?)\"@, fill => 'calvinandhobbes', referer => 'http://www.gocomics.com/',
				      file => 'calvinandhobbes'.sprintf('-%04d%02d%02d.gif', $time[5]+1900,$time[4]+1,$time[3]) };

	# Comics I don't collect anymore.
	#$list{'The Boondocks'}      = {url => sprintf('http://images.ucomics.com/comics/bo/%04d/bo%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Bound and Gagged'}   = {url => sprintf('http://images.ucomics.com/comics/tmbou/%04d/tmbou%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'Close to Home'}      = {url => sprintf('http://images.ucomics.com/comics/cl/%04d/cl%02d%02d%02d.gif',$time[5]+1900,$time[5]%100,$time[4]+1,$time[3]) };
	#$list{'The Norm'}           = {url => sprintf('http://est.rbma.com/content/Norm?date=%04d%02d%02d',$time[5]+1900,$time[4]+1,$time[3]), referer => 'http://www.kingfeatures.com/' };

	foreach $item (keys %list) {
	  $folder = $item;
	  $folder =~ s/(.)/\l$1/g;
	  $folder =~ s/ //g;
	  $folder =~ s/\.//g;
	  $list{$item}{name}   = $item;
	  $list{$item}{folder} = $folder;
	  $list{$item}{file}   = $folder.sprintf('-%04d%02d%02d.gif', $time[5]+1900,$time[4]+1,$time[3]) unless defined ($list{$item}{file});
	  $list{$item}{all}    = $prefix.$list{$item}{folder}.'/'.$list{$item}{file};
	  $list{$item}{img}    = 'comics/'.$list{$item}{folder}.'/'.$list{$item}{file};
	}

	return \%list;
}
