#!/usr/bin/perl
$VERSIJA = '0.06.08 © Karlo no DAC 2023.07.25';
$LICENCE = 'GPLv3';
$APRAKSTS = 'Veido HTML lapas balstoties uz video, titru un attēlu failiem';

sub paskaidro {
	&versija;
	print "\n" . '-' x 60  . "\n" .
		' ' x 9 . "$vide{ColourInfo}-h$vide{ColourReset}\tšis teksts;\n" .
		' ' x 9 . "$vide{ColourInfo}no=CELS1$vide{ColourReset}\tkur atrodami izejas faili;\n" .
		' ' x 9 . "$vide{ColourInfo}uz=CELS2$vide{ColourReset}\tkur veido pamācību;\n" .
		' ' x 9 . "$vide{ColourInfo}kp=CELS3$vide{ColourReset}\tkur atrodas koplietojami faili (relatīvi pret gatavo direktoriju);\n" .
		' ' x 9 . "$vide{ColourInfo}l=N$vide{ColourReset}\tapstrādā failus, kuri jaunāki par 'N' minūtēm;\n" .
		'-' x 60 . "\n";
	print "\n";
}

sub versija {
	print "\nVersija:\t$VERSIJA\nLicence\t$LICENCE\n$vide{ColourName}$APRAKSTS$vide{ColourReset}\n";
}

use Image::ExifTool;
use Time::Local qw( timelocal_posix );
use Path::Iterator::Rule;

# NOKLUSĒTIE MANĪGIE =======================================================#
#                                                                           #
#                                                                           #

$vide{ColourAlert} = "\e[91m\e[44m";
$vide{ColourInfo} = "\e[92m";
$vide{ColourName} = "\e[93m";
$vide{ColourReset} = "\e[m";

$vide{pap_html} = 'html';
$vide{SaakumFails} = 'index.' . $vide{pap_html};
$vide{VaarduFails} = 'vaardi.' . $vide{pap_html};
$vide{AprakstuFails} = '__dirinfo';
$vide{jaunsSaturs} = '__dirinfoS';
$vide{Stilulapa} = 'css/sarakstam.css';
$vide{pap_rss} = 'xml';

$vide{Virsraksts} = 'Padomi LU Dabasmājas IT lietotājiem';
$vide{Apraksts} = 'Videopamācības par to, kā lietot programmatūru un izmantot auditorijas';
$vide{Licence} = 'CC-BY-SA licence';
$vide{LicenceURL} = "<a href=https://creativecommons.org/licenses/by-sa/4.0/legalcode.lv target=_blank>$vide{Licence}</a>";
$vide{Autors} = '🄯 Kārlis Kalviškis';
$vide{AutorsE} = '🄯 karlis.kalviskis@lu.lv';
$vide{URL} = 'http://padomi.id.lv/';

# Cik "runātīgam" jābūt skriptam.
# 0 - Nearaksta neko.
# 1 - Tika sākuma un beigu paziņojumi.
# 2 - Kurā direktorijā darbojas.
# 3 - Kurus failus apstrādā.
$vide{RaadiKoDari} = 2;

# Nosaka, kura līmeņa satura rādītāju veido. Cik dziļi atrodas, attiecībā
# pret galveno satura rādītāju.
$vide{KursSaturs} = 0;

# Esošo un veidojamo failu atrašanās. Jaaizpilda no komandrindas.
$vide{NoKurienes} = '.';
$vide{UzKurieni} = '.';
$vide{Kopdirektorija} = '.';
$vide{prgdirektorija} = '../PRG';

# Sagatavojamais video fails ar titriem
$vide{pap_titri_lasa} = 'ass';
$vide{pap_titri_raksta} = 'vtt';
$vide{pap_video} = 'webm';
$vide{pap_atteeli} = ['jpg', 'png', 'gif'];
$vide{pap_doc} = 'md';
$vide{pap_pdf} = 'pdf';

$vide{IconHome} = '🏠';
$vide{IconVaardi} = '📑';
$vide{IconArAtteelu} = '📷';
$vide{IconSkaidro} = '📜';
$vide{IconVideo} = '📺';
$vide{IconScenarijs} = '📖';
$vide{RSS_URL} = '';

#ASS stilu atbilstība VTT iestatījumiem
$stili{'Default'} = '';
$stili{'Default-LV'} = 'line:50%  position:100%  align:end  size:50%';
$stili{'Default-CV'} = 'line:50%  aposition:50%  align:middle  size:80%';
$stili{'Default-KV'} = 'line:50%  position:0%  align:start  size:50%';
$stili{'Default-LAu'} = 'line:1 position:100%  align:end  size:50%';
$stili{'Default-CAu'} = 'line:1  position:50%  align:middle  size:80%';
$stili{'Default-KAu'} = 'line:1  position:0%  align:start  size:50%';
$stili{'Default-LAp'} = 'Region:LAp align:end';
$stili{'Default-KAp'} = 'Region:KAp  align:start';
$vide{Vid_apaksha}='
Region: id=KAp width=50% lines=0 regionanchor=0%,100% viewportanchor=0%,100% scroll=none
Region: id=LAp width=50% lines=0 regionanchor=100%,100% viewportanchor=100%,100% scroll=none
';
$vide{Vid_licence}="\n$vide{Licence}\nvide{AutorsE}\n";

# Masīvs atslēgvārdu satura rādītāajam
#? Nav pat vēl sākts veidot.
%AtsleegVaardi;

#                                                                           #
# MAINĪGO BEIGAS ===========================================================#


# Izpēta komandrindas parametrus =======================================
&paskaidro if !@ARGV;
foreach (@ARGV){
	if ($_ eq '-h' || $_ eq '-help' || $_ eq '--help'){
		&paskaidro;
		exit;
	}
	elsif ($_ eq '-v'){
		&versija;
		exit;
	}
	elsif (/^no=/){
		$vide{NoKurienes} = substr ($_,3);
	}
	elsif (/^uz=/){
		$vide{UzKurieni} = substr ($_,3);
	}
	elsif (/^kp=/){
		$vide{Kopdirektorija} = substr ($_,3);
	}
	elsif (/^l=(\d+)/){
		$vide{neVecaakiPar} = $1;
	}
	elsif (/^rc=/){
		$vide{RelatiivsCeljsh} = substr ($_,3);
	}
	elsif (/^jf=/){
		$vide{Jaunumi_video} = substr ($_,3);
	}
	else {
		print "$vide{ColourInfo} Šo parametru es nepazīstu: $vide{ColourName}$_$vide{ColourReset}\n";
	}
}

{
	my $kljuuda=0;
	if (!$vide{NoKurienes}){
		print "$vide{ColourAlert} Nav norādīts, kur atrodas saveidotie faili.$vide{ColourReset}\n";
		$kljuuda=1;
	}
	elsif (! -d $vide{NoKurienes}){
		print "$vide{ColourAlert} Saveidoto failu direktorija „$vide{NoKurienes}” nav atrodama.$vide{ColourReset}\n" ;
		$kljuuda=1;
	}
	if (!$vide{UzKurieni}){
		print "$vide{ColourAlert} Nav norādīts, kur veido aprakstus.$vide{ColourReset}\n";
		$kljuuda=1;
	}
	elsif (! -d $vide{UzKurieni}){
		print "$vide{ColourAlert} Aprakstu direktorija „$vide{UzKurieni}” nav atrodama.$vide{ColourReset}\n";
		$kljuuda=1;
	}
	if ($kljuuda){
		&paskaidro;
		exit 1
	}

	# Jaunumu pamatbarotnei
	if ($vide{Jaunumi_video} ne '') {
		$vide{Jaunumi}{$vide{UzKurieni}}{V} = $vide{Virsraksts};
		$vide{Jaunumi}{$vide{UzKurieni}}{P} = $vide{Apraksts};
	}
}

########################################################################
#                                                                      #
# --= Programmas sākums ========---------------------------------------#
#                                                                      #

print "\nSagatavotie: $vide{NoKurienes}\nGatavie: $vide{UzKurieni}\nKopdirektorija: $vide{Kopdirektorija}\n" if $vide{RaadiKoDari};

# Apstrādāto failu skaitītājs
$vide{apstraadaati_faili} = 0;
$vide{izlaisti_faili} = 0;
$vide{kluuda_atverot} = 0;

# Veido jaunumu barotni (RSS feed)
# Jābūt pirms lapu izveides, lai var ierakstīt galviņā
if ($vide{Jaunumi_video} ne '') {
	my @saraksts;
	if (open FAILS, "<$vide{Jaunumi_video}") {
		@saraksts = <FAILS>;
		close FAILS;
		chomp @saraksts;

		# Veido atsevišķu jaunumu barotni katram $vide{jaunsSaturs}.
		my $rule = Path::Iterator::Rule->new;
		$rule->name($vide{jaunsSaturs});
		my $it = $rule->iter($vide{NoKurienes});
		while ( my $file = $it->() ) {
			print "Atradu datni: $file\n";
			my %zinas;
			my $zinas_ref = &par_direktoriju ("$file", \%zinas);
			$file =~ s/$vide{NoKurienes}/$vide{UzKurieni}/;
			$file =~ s/$vide{jaunsSaturs}$//;
			$vide{Jaunumi}{$file}{V} = ($$zinas_ref{title} || $vide{Virsraksts});
			$vide{Jaunumi}{$file}{P} = ($$zinas_ref{about} || $$zinas_ref{description}) ? "$$zinas_ref{about} $$zinas_ref{description}" : $vide{Apraksts};
		}

		# Aizpilda barotni ar atbilstošajiem jaunajiem video aprakstiem
		foreach my $barotne (keys %{$vide{Jaunumi}}){
			print "Jaunumu barotne: $vide{Jaunumi}{$barotne}{V}\n";
			my $fails = &celsPARvardu ($barotne);
			my $vieta = $vide{Jaunumi_video};
			$vieta =~ s/[^\/]*$//;
			my $vieta_abs = $vieta;
			$vieta_abs =~ s/\.\.\///g;
			print "Veidoju: $vieta$fails.$vide{pap_rss}\n";
			if (open FAILS, ">$vieta$fails.$vide{pap_rss}") {
				print FAILS "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n";
				print FAILS "<channel>\n<atom:link href=\"$vide{URL}$vieta_abs$fails.$vide{pap_rss}\" rel=\"self\" type=\"application/rss+xml\" />\n";
				print FAILS "\t<title>$vide{Jaunumi}{$barotne}{V}</title>\n";
				print FAILS "\t<link>$vide{URL}</link>\n";
				print FAILS "\t<description>$vide{Jaunumi}{$barotne}{P}</description>\n";
				print FAILS "\t<generator>$0</generator>\n";
				print FAILS "\t<language>lv</language>\n";
				print FAILS "\t<copyright>$vide{Licence} $vide{Autors}</copyright>\n";
				foreach $t (reverse @saraksts) {
					my @ieraksts = split /\t/, $t;
					if ($ieraksts[1] =~ /$barotne/) {
						print FAILS "\t<item>\n";
						$ieraksts[1] =~ s/\.[^\.]*$//;
						my $saveidots = $ieraksts[1];
						$saveidots =~ s/$vide{UzKurieni}/$vide{NoKurienes}/;
						open FAILS2, "<$saveidots.$vide{pap_titri_lasa}";
						my @teksts = <FAILS2>;
						close FAILS2;
						my ($rinda, $Virsraksts);
						foreach $rinda (@teksts){
							if ($rinda =~ /^\s*Title:\s*(.*)$/i){
								$Virsraksts = $1;
								last;
							}
						}
						$ieraksts[1] =~ s/^$vide{RelatiivsCeljsh}//;
						print FAILS "\t\t<title>$Virsraksts</title>\n";
						print FAILS "\t\t<link>$vide{URL}$ieraksts[1].$vide{pap_html}</link>\n";
						print FAILS "\t\t<guid isPermaLink='true'>$vide{URL}$ieraksts[1].$vide{pap_html}</guid>\n";
						my ($datums, $laiks) = split /\s/, $ieraksts[0];
						my ($gads, $menesis, $diena) = split /\./, $datums;
						my ($stunda, $minutes) = split /:/, $laiks;
						print FAILS "\t\t<pubDate>" . &rfc822_gm(0, $minutes, $stunda, $diena, $menesis, $gads) . "</pubDate>\n";
						print FAILS "\t</item>\n";
					}
				}
				print FAILS "</channel>\n</rss>\n";
				close FAILS;
				$vieta =~ s/^$vide{RelatiivsCeljsh}//;
				$vide{RSS_URL} .= "<link rel='alternate' type='application/rss+xml' title='$vide{Jaunumi}{$barotne}{V}' href='$vide{URL}$vieta$fails.$vide{pap_rss}'>\n";
			}
			else{
				print "KĻŪDA: Neizdodas izveidot jaunumu barotni $vieta$fails.$vide{pap_rss}!\n";
			}
		}
	}
	else{
		print "Nav atrasts jauntapušo video saraksts.\n";
	}
}

# Veido lapas
&saturam(
	&sameklee_failus (
		0, $vide{NoKurienes}, $vide{UzKurieni}, $vide{Kopdirektorija}
		),
	$vide{NoKurienes}, $vide{UzKurieni}, $vide{SaakumFails}
	);

#? &vaardiem;


print "\n\n Apstrādāto failu skaits: $vide{apstraadaati_faili}\n" if $vide{RaadiKoDari};
print "Nelaboti faili: $vide{izlaisti_faili}\n" if $vide{izlaisti_faili} && $vide{RaadiKoDari};
print "Kļūdu skaits: $vide{kluuda_atverot}\n" if $vide{kluuda_atverot} && $vide{RaadiKoDari};
print "\n\n" if $vide{RaadiKoDari};

#                                                                      #
# --= Programmas beigas =======----------------------------------------#
#                                                                      #
########################################################################


# Staigā pa direktorijām un meklē failus
# Apakšprogramma, kas izsauc pati sevi, līdz visas direktorijas izlasītas
# Parametri:
#   $dziljums - cik dziļi apakšdirektorijās jau ir nokļūts;
#   $pusgatavi - sagatavoto failu direktorija;
#   $gatavi - gala rezultāta direktorija;
#   $kopdirektorija - koplietošans (css utt.) direktorija;
#   $saturs_ref - hash masīvs satura rādītajam;
#   $jauns - vai veido jaunu satura rādītāju.
sub sameklee_failus {
	my ($dziljums, $pusgatavi, $gatavi, $kopdirektorija, $saturs_ref, $jauns) = @_;
	my %saturs  = %$saturs_ref;
	my(@failu_saraksts, $fails);
	
	print "Skatos $pusgatavi\n" if $vide{RaadiKoDari} > 1;
	if (!opendir(DIREKTORIJA_NR, $pusgatavi)) {
		print "Diemžēl neizdevās atvērt $pusgatavi\n";
		return;
	}

	# Vai dotai direktorijai javeido pašai savs satura rādītājs
	if (!$jauns && -e "$pusgatavi/$vide{jaunsSaturs}") {
		close(DIREKTORIJA_NR);
		my %zinas;
		my $zinas_ref = &par_direktoriju ("$pusgatavi/$vide{jaunsSaturs}", \%zinas);
		$saturs{"$gatavi/$vide{SaakumFails}"}{'vaards'} = ($$zinas_ref{title} || $gatavi);
		$saturs{"$gatavi/$vide{SaakumFails}"}{citsSR} = 1;
		my %tukss;
		$tukss{'.'} = $dziljums - $saturs{'.'}{'vaards'};
		my $KursSaturs = $vide{KursSaturs};
		$vide{KursSaturs} = $dziljums;
		&saturam(&sameklee_failus ($dziljums, $pusgatavi, $gatavi, '../'x$dziljums . $vide{Kopdirektorija}, \%tukss, 1), $pusgatavi, $gatavi, $vide{SaakumFails}, $dziljums);
		$vide{KursSaturs} = $KursSaturs;
	}
	else {
		@failu_saraksts = readdir(DIREKTORIJA_NR);
		close(DIREKTORIJA_NR);
		foreach $fails (@failu_saraksts) {
			if ($fails =~ /^\./) {
				next;
			}	

			# Vai parasts fails
			if (-f "$pusgatavi/$fails"){
				# Failus salīdzina ar zināmiem failu paplašinājumiem.
				# Netiks ņemti vērā lielie/mazie burti

				# Titru fails
				if ($fails =~ /\.$vide{pap_titri_lasa}$/i) {
					$saturs_ref = &paarveido ($fails, $dziljums, $pusgatavi, $gatavi, $kopdirektorija, \%saturs);
					%saturs = %$saturs_ref;
				}
			}

			# Lai lieki negrabinātu disku, izmanto mainīgo _, ko saguva ar if salīdzinājumu
			# Pārbauda, vai dotajā direktorijā nav apakšdirektoriju
			elsif (-d _){
				$saturs_ref = &sameklee_failus($dziljums + 1, "$pusgatavi/$fails", "$gatavi/$fails", "$kopdirektorija/$fails", \%saturs);
				%saturs = %$saturs_ref;
			}
		}
		$saturs_ref = &vai_pdf($gatavi, \%saturs);
		%saturs = %$saturs_ref;
	}
	return \%saturs;
}

# Veido video failu HTML lapas
# Parametri:
#   $kuru - kuru video failu apstrādāt
#   $dziljums - cik dziļi apakšdirektorijās jau ir nokļūts;
#   $pusgatavi- sagatavoto failu direktorija;
#   $gatavi- gala rezultāta direktorija;
#   $kopdirektorija - koplietošans (css utt.) direktorija;
#   $saturs_ref - hash masīvs satura rādītajam;
sub paarveido {
	my ($kuru, $dziljums, $pusgatavi, $gatavi, $kopdirektorija, $saturs_ref) = @_;
	my %saturs = %$saturs_ref;
	my (@teksts, $rinda, $Nr, $Virsraksts, $failavards, $labotspirms, @apraksti);
	my($Layer, $Start, $End, $Style, $Name, $MarginL, $MarginR, $MarginV, $Effect, $Text);
	my $neVecaakiParDotais = $vide{neVecaakiPar};
	$kuru =~ /(.*)\.$vide{pap_titri_lasa}$/i;
	$failavards = $1;

	# Vai jāpārbauda labotā faila vecums
	if ($neVecaakiParDotais){
		my($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat("$pusgatavi/$kuru");
		print 'Labots pirms ' . (time - $mtime) / 60 . " minūtēm\n";
		$labotspirms = (time - $mtime) / 60;
	}
	else {
		$neVecaakiParDotais = 1;
		$labotspirms = 0;
	}
	if ($neVecaakiParDotais > $labotspirms){
		if (open FAILS, "<$pusgatavi/$kuru") {
			@teksts = <FAILS>;
			close FAILS;

			# Atver failu, kur ierakstiit
			print "Veido: $gatavi/$failavards.$vide{pap_titri_raksta}\n" if $vide{RaadiKoDari} > 2;
			if (open(JAUNAIS, ">$gatavi/$failavards.$vide{pap_titri_raksta}")) {

				$vide{apstraadaati_faili} += 1;
				my $kursieraksts;

				foreach $rinda (@teksts){
					if ($rinda =~ /^\s*Dialogue:\s*(.*)$/i){
						
						# Slīpraksts, trekns utt.
						($Layer, $Start, $End, $Style, $Name, $MarginL, $MarginR, $MarginV, $Effect, $Text) = split /,/, $1, 10;
						$Text =~ s/{\\(.)1}/<$1>/gims;
						$Text =~ s/{\\(.)1\\(.)1}/<$1><$2>/gims;
						$Text =~ s/{\\(.)0}/<\/$1>/gims;
						$Text =~ s/{\\(.)0\\(.)0}/<\/$1><\/$2>/gims;

						# Pāreja uz jaunu rindu
						$Text =~ s/\\n/\n<br>/gims;
						$apraksti[0][$kursieraksts] = "$Start";
						$apraksti[2][$kursieraksts] = "$End";
						$apraksti[1][$kursieraksts++] = $Text;
						$Text =~ s/<br>//gims;
						print JAUNAIS $Nr++ . "\n0$Start" . "0 --> 0$End" . "0  $stili{$Style}\n$Text\n\n";
					}
					elsif ($rinda =~ /^\s*Title:\s*(.*)$/i){
						$Virsraksts = $1;
						print JAUNAIS "WEBVTT - $Virsraksts\n\n";
						print JAUNAIS "NOTE $vide{Vid_licence} $vide{Vid_apaksha}\n\n";
					}
				}
				close JAUNAIS;

				# Veido HTML failus
				if ($vide{pap_html}){
					my $atteli_ref = &vai_atteeli ($failavards, $dziljums, $pusgatavi, $gatavi, $kopdirektorija);
					my $htmlfails = "$gatavi/$failavards.$vide{pap_html}";
					if (open(JAUNAIS, ">$htmlfails")) {
						$direktorija =~ /.*\/([^\/]+)\/$/;
						$vieta = $1;
						my %paarsuuti;
						$paarsuuti{title} = $Virsraksts;
						$paarsuuti{dziljums} = $dziljums;
						$paarsuuti{dziljums_maajai} = $dziljums - $vide{KursSaturs};
						$paarsuuti{maajup} = "./$vide{SaakumFails}";
						$paarsuuti{izdrukaajams} = "$failavards\[\].$vide{pap_html}" if %$atteli_ref;
						print JAUNAIS &galvinja(\%paarsuuti);
						print JAUNAIS &saakums(\%paarsuuti);
						print JAUNAIS "
<video controls autoplay type='video/webm' src='$failavards.$vide{pap_video}'>
	<track kind='captions' label='Latviešu'  src='$failavards.$vide{pap_titri_raksta}' srclang='lvs' default>
</video>
\n

<div class=paskaidro>
<input id=paskaidro class=paskaidro type=checkbox>
<label for=paskaidro>Paskaidrojumi:</label>
<div class=ierobezots>
<table>
 ";
						my @atteelu_laiki = sort {$a <=> $b} keys %$atteli_ref;
						my ($laiks1, $laiks2, $laiks0);
						for ($i = 0; $i < $kursieraksts; $i++){
							if (@atteelu_laiki) {
								$apraksti[0][$i] =~ /(\d+)\:(\d+):(\d+\.\d+)/;
								$laiks1 = (3600 * $1) + (60 * $2) + $3;
								$apraksti[2][$i] =~ /(\d+):(\d+):(\d+\.\d+)/;
								$laiks2 = (3600 * $1) + (60 * $2) + $3;
								while (@atteelu_laiki && $atteelu_laiki[0] < $laiks1) {
									$laiks0 = shift @atteelu_laiki;
									print  JAUNAIS "<tr><th></th><td><a href=$$atteli_ref{$laiks0}{pamats}\[$laiks0\].$vide{pap_html}>$vide{IconArAtteelu}</a></td><td>$$atteli_ref{$laiks0}{title}</td></tr>\n";
								}
							}
							print  JAUNAIS "<tr><th>$apraksti[0][$i]<br>$apraksti[2][$i]</th><td>";
							if (@atteelu_laiki) {
								if ($atteelu_laiki[0] < $laiks2) {
									$laiks0 = shift @atteelu_laiki;
									print  JAUNAIS "<a href=$$atteli_ref{$laiks0}{pamats}\[$laiks0\].$vide{pap_html}>$vide{IconArAtteelu}</a>";
								}
							}
							print  JAUNAIS "</td><td>$apraksti[1][$i]</td></tr>\n";
						}
						if (@atteelu_laiki) {
							while ($atteelu_laiki[0]) {
								$laiks0 = shift @atteelu_laiki;
								print  JAUNAIS "<tr><th></th><td><a href=$$atteli_ref{$laiks0}{pamats}\[$laiks0\].$vide{pap_html}>$vide{IconArAtteelu}</a></td><td>$$atteli_ref{$laiks0}{title}</td></tr>\n";
							}
						}
						print  JAUNAIS "</table>\n</div>\n</div>\n";
						print  JAUNAIS &aste (\%paarsuuti);
						close JAUNAIS;

						# Reģistrē failu satura rādītājam
						$htmlfails =~ s@^$vide{UzKurieni}/@@;
						$saturs{$htmlfails}{'vaards'} = $Virsraksts;
					}
				}
			}
			else {
				print "Nevar ierakstīt failā $gatavi/$failavards.$vide{pap_titri_raksta}\n";
				$vide{kluuda_atverot}++; 
			}
		}
		else {sub rfc822_gm {
    my ($epoch) = @_;

    my @time = gmtime $epoch;

    my @month_names = qw(Jan Feb Mar Apr May Jun
                         Jul Aug Sep Oct Nov Dec);
    my @day_names = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

    return sprintf('%s, %02u %s %04u %02u:%02u:%02u +0000',
                   $day_names[$time[6]], $time[3], $month_names[$time[4]],
                   $time[5] + 1900, $time[2], $time[1], $time[0]);
}

			print "Nevar atvērt failu $gatavi/$kuru \n";
			$vide{kluuda_atverot}++; 
		}
	}
	else{
		$vide{izlaisti_faili}++;
	}
	return \%saturs;
}


# Meklē attēlus
# Parametri:
#   $kuru - kuram video failam meklēt
#   $dziljums - cik dziļi apakšdirektorijās jau ir nokļūts;
#   $pusgatavi- sagatavoto failu direktorija;
#   $gatavi- gala rezultāta direktorija;
#   $kopdirektorija - koplietošans (css utt.) direktorija.
# Atgriež atsauci uz vārdisko masīvu ar pieejamiem attēliem.
sub vai_atteeli{
	my ($kuru, $dziljums, $pusgatavi, $gatavi, $kopdirektorija) = @_;
	my ($fails, @failu_saraksts, $pap, %atrastie);
	if (opendir(DIREKTORIJA_NR, $pusgatavi)) {
		@failu_saraksts = readdir(DIREKTORIJA_NR);
		close(DIREKTORIJA_NR);
		foreach $fails (@failu_saraksts) {
			if ($fails =~ /^\./) {
				next;
			}	

			# Vai parasts fails
			if (-f "$pusgatavi/$fails"){
				# Failus salīdzina ar zināmiem failu paplašinājumiem.
				foreach $pap (@{$vide{pap_atteeli}}){
					if ($fails =~ /^$kuru\[(.*)\]\.$pap$/) {
						my $sekundes = $1;
						my $html;
						my $atteelaapraksts = "$pusgatavi/$kuru\[$sekundes\].$vide{pap_doc}";
						print "Atradu: $pusgatavi/$fails\n" if $vide{RaadiKoDari} > 2;
						if ( -e $atteelaapraksts ) {
							$html = `multimarkdown $atteelaapraksts`;
						}

						# Attēlam nav apraksata faila
						else {
							$html = "<h1>$fails</h1>";
						}
						if (open (APRAKSTS, ">$gatavi/$kuru\[$sekundes\].$vide{pap_html}")) {
							$html =~ s/<h1[^>]*>(.*?)<\/h1>//i;
							my $Virsraksts = $1;
							my %paarsuuti = (
								title => $Virsraksts,
								dziljums => $dziljums,
								video => "./$kuru.$vide{pap_html}",
								att => $fails,
								izdrukaajams => "$kuru\[\].$vide{pap_html}"
							);
							print APRAKSTS &galvinja(\%paarsuuti);
							print APRAKSTS &saakums(\%paarsuuti);
							my $paarsuuti_ref = &kuri_atteeli ("$kuru\[$sekundes\]", $gatavi, \%paarsuuti);
							print APRAKSTS &ievieto_ateelu($$paarsuuti_ref{att}, $$paarsuuti_ref{att_p}, 'Att_viens');
							print APRAKSTS "<div class=Att_labaa_mala>\n$html\n</div>";
							print APRAKSTS &aste($paarsuuti_ref);
							close APRAKSTS;
							$atrastie{$sekundes}{pamats} = $kuru;
							$atrastie{$sekundes}{title} = $$paarsuuti_ref{title};
							$atrastie{$sekundes}{teksts} = $html;
							my $pagaidu;
							foreach $pagaidu (keys %$paarsuuti_ref) {
								if ($pagaidu =~ /^att/) {
									$atrastie{$sekundes}{$pagaidu} = $$paarsuuti_ref{$pagaidu};
								}
							}
						}
						last;
					}
				}
			}
		}

	}
	else {
		print "Diemžēl neizdevās atvērt $pusgatavi\n";
		return;
	}

	# Izveido kopējo lapu ar attēliem
	if (open (APRAKSTS, ">$gatavi/$kuru\[\].$vide{pap_html}")) {
		my %paarsuuti;
		my $paarsuuti_ref = &par_direktoriju ("$pusgatavi/$vide{AprakstuFails}", \%paarsuuti);
		$$paarsuuti_ref{dziljums} = $dziljums;
		$$paarsuuti_ref{video} = "./$kuru.$vide{pap_html}";
		print APRAKSTS &galvinja($paarsuuti_ref);
		print APRAKSTS &saakums($paarsuuti_ref);
		print APRAKSTS "<table>\n";
		my $pagaidu;
		foreach $pagaidu (sort {$a <=> $b} keys %atrastie) {
			print APRAKSTS "<tr><td>" . &ievieto_ateelu("$atrastie{$pagaidu}{pamats}\[$pagaidu\].$vide{pap_html}", $atrastie{$pagaidu}{att_m});
			print APRAKSTS "</td><td><h2>$atrastie{$pagaidu}{title}</h2>$atrastie{$pagaidu}{teksts}</td></tr>\n";
		}
		print APRAKSTS "</table>\n";
		print APRAKSTS &aste($paarsuuti_ref);
		close APRAKSTS;
	}
	return \%atrastie;
}

#Vai ir citi attēla izmēri
# Mekle punktu un burtus pirms palašinajuma, piemeram, 'vaards.p.png'
# bez - attēls labakā  kvalitatē.
# .p  - vidēja izmēra un kvalitātes attēls (800×).
# .m  - atēls kopskatam (200×).
# .s  - sīkattēls satra rādītājam (99×).
# Saņem:
#   $kuru  - faila vārds (bez paplašinajuma);
#   $vieta - kurā diirektorijā.
# Saņem un nosūta:
#   $mainiigie_ref - atsauce uz vārdisko masīvu, kurā ievietot atrasto
#                 attēlu vārdus.

sub kuri_atteeli {
	my ($kuru, $vieta, $mainiigie_ref) = @_;
	foreach $p ('s', 'p', 'm') {
		foreach $pap (@{$vide{pap_atteeli}}){
			$$mainiigie_ref{'att_' . $p} = "$kuru.$p.$pap" if -e "$vieta/$kuru.$p.$pap";
		}
	}
	return $mainiigie_ref;
}

# Meklē pdf failus
# Parametri:
#   $gatavi- gala rezultāta direktorija;
#   $saturs_ref - atsauce uz 
# Atgriež atsauci uz statura rādītāja masīvu.
sub vai_pdf{
	my ( $gatavi, $saturs_ref) = @_;
	my ($fails, @failu_saraksts);
	my %saturs = %$saturs_ref;
	my $atsleegai = $gatavi;
	$atsleegai  =~ s/^$vide{UzKurieni}\///;
	my $exifTool = new Image::ExifTool;
	$exifTool->Options(Unknown => 1);
	if (opendir(DIREKTORIJA_NR, $gatavi)) {
		@failu_saraksts = readdir(DIREKTORIJA_NR);
		close(DIREKTORIJA_NR);
		foreach $fails (@failu_saraksts) {

			# Vai parasts un nepaslēpts fails
			if ($fails =~ /^\./) {
				next;
			}
			elsif (-f "$gatavi/$fails"){
				if ($fails =~ /\.$vide{pap_pdf}$/) {
					print "Atrasts $atsleegai/$fails\n" if $vide{RaadiKoDari} > 2;
					my $info = $exifTool->ImageInfo("$gatavi/$fails");
					my $virsraksts = $exifTool->GetValue('Title');
					my $teema = $exifTool->GetValue('Subject');
					$datums = $exifTool->GetValue('CreateDate');
					$datums =~ s/\s+.*$//;
					my $nosaukums;
					if ($virsraksts) {
						$nosaukums = $virsraksts;
					}
					elsif ($teema) {
						$nosaukums = $teema;
					}
					else {
						$nosaukums = $fails;
					}
					$saturs{"$atsleegai/$fails"}{'vaards'} = $nosaukums;
					$saturs{"$atsleegai/$fails"}{'datums'} = $datums;
					$saturs{"$atsleegai/$fails"}{'teema'} = $teema if $virsraksts;
				}
			}
		}
	}
	return \%saturs;
}

# Veido satura rādītāju
# Parametri:
#   $saturs_ref - atsauce uz statura rādītāja masīvu
#   $no_kurienes - kurā direktorijā ir izejas faili
#   $kura_dir - kurā direktorijā veidot
#   $kurs_fails - kā nosaukt failu
#   $dziljums - cik talu no pamatdirektorijas
sub saturam {
	my ($saturs_ref, $no_kurienes, $kura_dir, $kurs_fails, $dziljums) = @_;
	my %saturs = %$saturs_ref;
	my $kur_rakstiit = "$kura_dir/$kurs_fails";
	if (open(JAUNAIS, ">$kur_rakstiit")) {
		my ($direktorija, $direktorijaV, $direktorijaVcSR, $fails);
		my (%paarsuuti, %pagaidu);
		my $pagaidu_ref = &par_direktoriju ("$no_kurienes/$vide{jaunsSaturs}", \%pagaidu);
		$paarsuuti{dziljums} = $dziljums;
		my $kas_aprastiits;
		$paarsuuti{title} = ($$pagaidu_ref{title} || $vide{Virsraksts});
		foreach $kas_aprastiits (keys %$pagaidu_ref) {
			$paarsuuti{$kas_aprastiits} = $$pagaidu_ref{$kas_aprastiits};
		}
		if ($dziljums > 0) {
			$paarsuuti{maajup} = $vide{SaakumFails};
			$paarsuuti{dziljums_maajai} = $$saturs_ref{'.'};
		}
		print JAUNAIS &galvinja(\%paarsuuti);
		print JAUNAIS &saakums(\%paarsuuti);
		print JAUNAIS "<div class=kokveida>\n";
		print JAUNAIS "<ul>\n";
		delete($saturs{'.'}{'vaards'});
		my (@SadaliitaAtsleega1, @SadaliitaAtsleega2, $liimenis, $ni,
		$atslega, %dirsaturs, $dirsaturs_ref, $atsauce, $uzzinjai);
		foreach $fails (sort(keys %saturs)){

			#Atslēgu veido faila ceļš
			$direktorija = $fails;
			$direktorija =~ s@[^/]*$@@;
			$atsauce = "<a href=" . '../'x$dziljums . "$fails>";
			if ($saturs{$fails}{teema}) {
				$atsauce .= "<span class=virsraksts>$saturs{$fails}{vaards}</span> ($saturs{$fails}{teema})</a>";
			}
			else {
				$atsauce .= "$saturs{$fails}{vaards}</a>";
			}
			$atsauce .= "<span class=datums> – [$saturs{$fails}{'datums'}]</span>" if $saturs{$fails}{datums};

			# Norāde uz citu satura rādītaju
			if ($saturs{$fails}{citsSR}){
				print JAUNAIS "<p>$atsauce</p>\n";
			}
			else {

				# Pirmā reize
				if (@SadaliitaAtsleega1 == 0){
					@SadaliitaAtsleega1 = split '/', $direktorija;
					@SadaliitaAtsleega2 = @SadaliitaAtsleega1;
					$liimenis = @SadaliitaAtsleega1 - 1;
					for ($ni = ($dziljums || 0) ; $ni <= $liimenis; $ni++){
						$atslega = join '/', @SadaliitaAtsleega1[($dziljums || 0)..$ni];
						$uzzinjai = join '/', @SadaliitaAtsleega1[0..$ni];
						%dirsaturs = ();
						$dirsaturs_ref = &par_direktoriju ("$vide{NoKurienes}/$uzzinjai/$vide{AprakstuFails}", \%dirsaturs);
						print JAUNAIS "<li>\n<a name=$atslega></a>
						<input type='checkbox' id='$atslega' />
						<label for='$atslega'>" . ($$dirsaturs_ref{title} || $atslega) . "</label>
						<ul>\n";
					}
				}
				else {
					@SadaliitaAtsleega1 = ();
					@SadaliitaAtsleega1 = split /\//, $direktorija;
					my $atshkjiras = &nav_vienaadi (\@SadaliitaAtsleega1, \@SadaliitaAtsleega2);
					if ($atshkjiras ne 'F') {
						for ($ni = ($liimenis) ; $ni >= $atshkjiras; $ni--){
							print JAUNAIS "</ul>\n</li>\n";
						}
						$liimenis = @SadaliitaAtsleega1 - 1;
						@SadaliitaAtsleega2 = @SadaliitaAtsleega1;
						for ($ni = $atshkjiras ; $ni <= $liimenis; $ni++){
							$atslega = join '/', @SadaliitaAtsleega1[($dziljums || 0)..$ni];
							$uzzinjai = join '/', @SadaliitaAtsleega1[0..$ni];
							%dirsaturs = ();
							$dirsaturs_ref = &par_direktoriju ("$vide{NoKurienes}/$uzzinjai/$vide{AprakstuFails}", \%dirsaturs);
							print JAUNAIS "<li>\n<a name=$atslega></a>
							<input type='checkbox' id='$atslega' />
							<label for='$atslega'>" . ($$dirsaturs_ref{title} || $atslega) . "</label>
							<ul>\n";
						}
					}
				}
				print JAUNAIS "<li>$atsauce</li>\n";
			}
		}
		for ($ni = ($liimenis) ; $ni >= ($dziljums || 0); $ni--){
			print JAUNAIS "</ul>\n</li>\n";
		}
		print JAUNAIS "</ul>\n</div>\n";
		print JAUNAIS &aste (\%paarsuuti);
		close JAUNAIS;
	}
	else {
		print "$vide{ColourAlert}Nevar izveidot satura rādītāju «$vide{ColourName}$kur_rakstiit$vide{ColourAlert}»$vide{ColourReset}\n"
	}
}

# Veido vārdisko satura rādītaju
#? Nav sākts veidot.
sub vaardiem{
	my ($saturs_ref, $kur_rakstiit, $dziljums) = @_;
	my %saturs = %$saturs_ref;
	if (open(JAUNAIS, ">$kur_rakstiit")) {
		close JAUNAIS;
	}
	else {
		print "$vide{ColourAlert}Nevar izveidot vārdisko rādītāju «$vide{ColourName}$kur_rakstiit$vide{ColourAlert}».$vide{ColourReset}\n"
	}
}


# Izlasa dirinfo failu
# $fails - kuru lasīt
# $saturs_ref - atsauce uz vardisko masīvu saturam
sub par_direktoriju {
	my ($fails, $saturs_ref) = @_;
	local *FAILS;
	if (open(FAILS, "<$fails")) {
		my @saturs1 = <FAILS>;
		close FAILS;
		chomp @saturs1;
		my @saturs = grep (!/^\s*$/, @saturs1);
		foreach (@saturs){
			/\s*(\S*)\s+(.*)$/;
			$$saturs_ref{$1} = $2;
		}
	}
	return $saturs_ref;
}

# Pārbauda, vai masīvi atšķiras
# Nosūta salīdzinamos masīvus
# Atgriež pirmā ieraksta, kurš atšķiras, kārtas numuru, vai
# 'F', ja masīvi vienādi.
sub nav_vienaadi {
	my($m1, $m2) = @_;
	my $l1 = @$m1;
	my $l2 = @$m2;
	my ($mazs, $ni);
	my $atskiras = 'F';
	$l1 < $l2 ? $mazs = $l1 : $mazs = $l2;
	$atskiras = $mazs if $l1 != $l2;
	for ($ni = 0 ; $ni < $mazs; $ni++){
		if ($$m1[$ni] ne $$m2[$ni]) {
			$atskiras = $ni;
			last;
		}
	}
	return $atskiras;
}


# Izveido html lapas galviņas tekstu
# $mainiigie_ref - atsauce uz vardisko masīvu, kurā:
#       dziljums   - cik tālu no pamatdirektorijas;
#       keywords   - atslēgvārdi;
#       stils      - stilu lapa, kurai jaatrodos kopēja direktorijā;
#       title      - lapas virsraksts.
sub galvinja {
	my ($mainiigie_ref) = @_;
	$$mainiigie_ref{stils} = ($$mainiigie_ref{stils} || $vide{Stilulapa});
	my $teksts;
	$teksts .= "<HTML>\n<HEAD>\n<TITLE>" .
		&izmet_html($$mainiigie_ref{title} || $vide{Virsraksts}) . "</TITLE>\n" .
		"<meta content='text/html; charset=utf-8' http-equiv='Content-Type'>\n" .
		"<link rel='SHORTCUT ICON' href='" .
		('../' x $$mainiigie_ref{dziljums}) . "$vide{Kopdirektorija}/att/dators.png'>\n";
	$teksts .= "<link rel='stylesheet' type='text/css' href='" .
			('../' x $$mainiigie_ref{dziljums}) . "$vide{Kopdirektorija}/$$mainiigie_ref{stils}'>\n";
	$teksts .= $vide{RSS_URL};
	$teksts .= "</HEAD>\n<BODY>\n";
	return $teksts;
}


# Izveido html lapas sākuma tekstu
# $mainiigie_ref - atsauce uz vardisko masīvu, kurā:
#       about       - īss apraksts;
#       description - paplašināts apraksts
#       dziljums    - cik tālu no pamatdirektorijas;
#       dziljums_maajai - majas lapas dziljums;
#       maajup      - norāde uz mājas lapu;
#       title       - lapas virsraksts;
#       video       - lapa ar video.
sub saakums {
	my ($mainiigie_ref) = @_;
	my $teksts = "<div  class=izvelne>\n";
	if ($$mainiigie_ref{maajup}) {
		$teksts .= " <span class=maajup><a href=" .
			('../' x $$mainiigie_ref{dziljums_maajai}) .
			"$$mainiigie_ref{maajup}>$vide{IconHome}</a></span> ";
	}
	if ($$mainiigie_ref{video}) {
		$teksts .= " <span class=ivideo><a href=$$mainiigie_ref{video}>$vide{IconVideo}</a></span> ";
	}
	if ($$mainiigie_ref{izdrukaajams}) {
		$teksts .= " <span class=izdrukai><a href=$$mainiigie_ref{izdrukaajams}>$vide{IconSkaidro}</a></span> ";
	}
	$teksts .= "</div>\n";
	$teksts .= "<h1>" . ($$mainiigie_ref{title} || $vide{Virsraksts}) . "</h1>\n";
	$teksts .= ($$mainiigie_ref{about} || $$mainiigie_ref{description}) ? "<p>$$mainiigie_ref{about} $$mainiigie_ref{description}</p>\n" : '';

	return $teksts;
}

# Izveido attēla ievietošanas tekstu
# Saņem:
#       $att    - labākās kvalitātes attēls;
#       $att_p  - attēls, kuru jāievieto;
#       $klase  - stila klase, kuru piešķirt.
# Nosūta sagatavotu html tekstu.

sub ievieto_ateelu {
	my ($att, $att_p, $klase) = @_;
	my $teksts;
	if ($klase) {
		$teksts = "<div class='$klase'>\n";
	}
	if ($att && $att_p) {
		$teksts .= "<a href=$att>\n";
	}
	$teksts .= "<img src=" . ($att_p || $att) . ">\n";
	if ($att && $att_p) {
		$teksts .= "</a>\n";
	}
	if ($klase) {
		$teksts .= "</div>\n";
	}
	return $teksts;
}


# Izveido html lapas nobeiguma tekstu
# $mainiigie_ref - atsauce uz vardisko masīvu, kurā:
#     autorsE    - lapas autors;
#     datumsA   - attēla izveides laiks;
#     datumsT   - teksta izveides laiks;
#     datumsV   - video izveides laiks;
#     dziljums  - cik tālu no pamatdirektorijas;
#     licenceURL   - ar kādu licenci saturs izplatāms.
sub aste {
	my ($mainiigie_ref) = @_;
	my $teksts .= "<table class=aste><tr>\n" .
		"<td class=par_prg><a href=" .
		'../' x $$mainiigie_ref{dziljums} . $vide{prgdirektorija} . '/' .
		">Lapu izstrāde izmantota programmatūra</a><br><a href=" .
		'../' x $$mainiigie_ref{dziljums} . $vide{Kopdirektorija} . '/css/' .
		">Lapu izskatam izmantotie stili</a><br><a href=" .
		'../' x $$mainiigie_ref{dziljums} . $vide{Kopdirektorija} . '/rss/' .
		">Vietnes jaunumi</a></td>\n" .
		"<td class=paraksts>$vide{LicenceURL} $vide{AutorsE}</td>\n" .
		"</tr></table>\n" .
		"</BODY>\n</HTML>\n";
	return $teksts;
}


# No atsūtītā teksta izmet visus HTML kodus
# Pārsūta tekstu, atgriež tekstu
sub izmet_html {
	my $teksts = shift;
	$teksts =~ s/<[^>]*>//g;
	return $teksts;
}

# Pārveido laika virkni GMT pasta formātā
# Jāatsūta (sekundes, minūtes, stunda, mēneša_diena, mēnesis, gads)
sub rfc822_gm {
	my ($sekundes, $minutes, $stunda, $menesdiena, $menesis , $gads) = @_;
	my @time = gmtime (timelocal_posix($sekundes, $minutes, $stunda, $menesdiena, $menesis - 1 , $gads - 1900)); 
	my @month_names = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
	my @day_names = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
	return sprintf('%s, %02u %s %04u %02u:%02u:%02u +0000',
		$day_names[$time[6]], $time[3], $month_names[$time[4]],
		$time[5] + 1900, $time[2], $time[1], $time[0]);
}


# Pārveido ceļu par lietojamu datnes vārdu (aizstāj slīpsvītras)
sub celsPARvardu {
	my $teksts = shift;
	$teksts =~ s/(\/|\.)/_/g;
	return $teksts;
}
