#!/usr/bin/perl

# prace generovani a pregenerovani albumu
sub usage {
	print  <<EOL
usage: $0 [-i] [-c] [-t] album.dat

	--install,-i prida se do Hpp.mk
	--create,-c vytvori prazdy album.dat *.jpg
		bez popisek a s jednim listem -
	--patch,-p FILE.DAT prida do file.dat upravy popsane
		file.dat (metoda posledni vytezi, poradi zustava) 
	--touch,-t pokud neexistuji vytvori prislusne *.il2 
	album.dat specifikuje z ktereho souboru se bude cist

format souboru .dat:
|Popis listu L|L.|
|Popis listu K|K.|
Cestak/fotce-n.jpg|Popis fotky|L.K.|flags
                                ^-- seznam listu ve kterych se nachazi

prazdna polozka fotky znamena list

EOL
} # usage

use Getopt::Long;
%listy = ();
# vytovori seznam listu na zaklade foto.dat
sub do_listy {
	open DAT, "$dat" or die "cannt open $DAT";
	while(<DAT>) {
		chomp;
		($jpg,$desc,$list,$rest) = split("\\|");
		if($jpg eq "") {
			$list =~ s/\..*//;
			$list = "-" if(!$list);
			$listy{$list} = $desc;
		}
	}
} # do_listy

sub listfile {
	($list) = @_;;
	return $list eq "-" ? "foto.il2" : "foto-$list.il2";
} # listfile

sub touch() {
	do_listy();
	foreach $list(keys%listy) {
		$il2 = listfile($list);
		if( -f "$il2" ) {
			system("touch $il2");
			next;
		}
		open IL2, ">$il2" or die "cann open > il2";
		print IL2 "dnl\n";
		print IL2 "dnl generovano automaticky, ale klidne edituj\n";
		print IL2 "dnl generovano pouze pokud soubor neexistuje\n";
		print IL2 "dnl\n\n";

		print IL2 "_titleh($listy{$list})\n\n";
		print IL2 "_foto_list(foto.dat,$list)\n";
	}
	print "*.il2 touched (or created)(", join(" ",keys%listy),")\n";
	if ( !( -l  "index.html" || -f "index.html" ||  -f "index.il2" ) ) {
		$cmd = "ln -s foto.html index.html";
		system($cmd) and die "cannt $cmd";
		print"created symlink index.html --> foto.html\n";
	}
} # install_il2

sub install {

	my $hpp = "Hpp.mk";
	do_listy();

	open HPP, ">>$hpp" or die "cann open $hpp";
	if ( 0 == system("grep  -q '^ALBUM=' $hpp ")) {
		print HPP "### ***** replaced\n";
		print"fotky jiz v Hpp.mk jsou, zkontroluj vysledek";
	}	
	print HPP "ALBUM=foto.dat\n";
	print HPP "ALBUM_LISTY=", (map{listfile("$_")." "} keys %listy), "\n";
	close HPP;
	print "$dat added to $hpp\n";
} # install_hpp

sub patch {
	print "not yet\n"
} # patch 

sub create {
	if( -f "$dat" ) {
		print"$dat existuje, nejprve ho smaz\n";
	}
	$find = "find -name '*-n.jpg'|sort";
	open FIND, "$find|" or die "cannt open $find";
	open DAT, ">$dat" or die "cann open >$dat";
	
	print DAT "|Fotky|-.\n";

	while($file=<FIND>) {
		chomp$file;
		$file =~ s/^\.\///;
		$woext = $file;
		$woext  =~ s/\.jpg$//;
		print DAT "$file|$woext|||\n";
		$files++;
	}	
	close DAT;
	close FIND;
	if($files == 0) {
		print"nenasel jsem zadny soubor ve tvar *-n.jpg";
	}
} # create 

############################# main

GetOptions(qw(
	--install|i
	--create|c
	--patch|p=s
	--touch|t
	--all|a
	));


$dat = $ARGV[0]? $ARGV[0]: "foto.dat";

if( $opt_all ) {
	$opt_create++;
	$opt_touch++;
	$opt_install++;
}
if(  not ($opt_touch || $opt_create || $opt_install || $opt_patch) ) {
	usage();
	exit;
}

if($opt_create){
	create();
}

if($opt_touch) {
	touch;

}
if($opt_install) {
	install();

}
if($opt_patch) {
	patch;
}
