#!/usr/bin/perl 

# Script zum Erstellen von Links für Tatort-Aufzeichnungen
# 
# Die Tatort-Folgen werden chronologisch auf der Platte gespeichert
# Das Script erstellt ein Verzeichnis nach Ermittler

use strict ;
use locale ;
use warnings ;
use File::Find ;
use File::Path ;
use Getopt::Std ;

my $use = "tatort.pl [-l] [-e] [-a] 
 -l Links löschen
 -e Ermittler-Links erzeugen
 -a Alphabetische-Links erzeugen
" ;
# -n Die neusten 20 Aufzeichnungen


our( $opt_l , $opt_e , $opt_a ) ;
getopts("lea") ;
$opt_l = $opt_l || 0 ;
$opt_e = $opt_e || 0 ;
$opt_a = $opt_a || 0 ;
# print "'$opt_l' '$opt_e' '$opt_a'\n" ;
if (($opt_l == 0) and ($opt_e == 0) and ($opt_a == 0)) { print $use; exit 1 ; }


# ------ Einstellungen ------
# my $DIR_TATORT_CHRONOLOGISCH = "/video0/Tatort_chronologisch" ;
 my $DIR_TATORT_CHRONOLOGISCH = "/video0/00_sdd1/Tatort" ;
# my $DIR_TATORT_CHRONOLOGISCH = "/video0/00_sdd1/Tatort_chronologisch" ;

# my $DIR_TATORT_ERMITTLER     = "/video0/Tatort_nach_Ermittler_(Symlinks)" ;
my $DIR_TATORT_ERMITTLER     = "/video0/00_sdd1/Tatort_nach_Ermittler" ;
# my $DIR_TATORT_ERMITTLER     = "/video0/00_sdd1/Tatort_test" ;

# my @DB_Datei                 = "tatort.db" ;
# my @DB_Datei                 = "/usr/local/bin/tatort_v0.0.db" ;
# my @DB_Datei                 = "/usr/local/bin/tatort_v0.2.db" ;
 my @DB_Datei                 = "/usr/local/bin/tatort-db_v0.7.db" ;

# ---------------------------
my $Nr             = 0 ;
my $AnzErmittler   = 0 ;
my $AnzFolgen      = 0 ;
my $AnzDatensaetze = 0 ;

print "\ntatort_v0.3 - Das Script für Tatort-Fans\n" ;

############################################################################
# -l   Links löschen
if ($opt_l == 1) {
	# Wenn das Verzeichnis existiert Verzeichnis löschen
	if (-d $DIR_TATORT_ERMITTLER) {	rmtree ($DIR_TATORT_ERMITTLER);	}   		
	}



############################################################################
# -e Ermittler-Links erzeugen
if ($opt_e == 1) {

	print "Gefundene Tatort-Folgen:\n" ;
			
	# Aufnahme-Verzeichnis auslesen und in @Videolist speichern
	my @VideoList ;
	find ( \&funcfind , "$DIR_TATORT_CHRONOLOGISCH" )  ;

	sub funcfind {
		return unless ( $File::Find::name =~ /.*rec\/index.vdr?/ ) ;
		push ( @VideoList , $File::Find::name ) ;
	}

  # Wenn Verzeichnis $DIR_TATORT_ERMITTLER nicht existiert, dann anlegen
  if ( not (-d $DIR_TATORT_ERMITTLER)) {	mkdir($DIR_TATORT_ERMITTLER,0777);	} 

	# für alle gefundenen Aufnahmen
	foreach my $Zeile ( @VideoList ) {
		$AnzFolgen++;
		my @CurrFile = split ( "/" , $Zeile ) ;
		shift @CurrFile  ; # 1. Element wegschneiden, weil split ein erstest leeres Element liefert
		my $ODatumElement = $CurrFile[$#CurrFile -1] ;
		my $OFolge        = $CurrFile[$#CurrFile -2] ;
		my $OVerzeichnis  = $CurrFile[$#CurrFile -3] ;
#		my $ONr           = substr("$OFolge", 1, 3) ;  
		my $ONr           = substr("$OFolge", 1, 4) ; 
		my $ORF		  = substr("$ONr", 3, 1);

# 		print "    ORF='$ORF' " ;				
		if ( $ORF eq ")" )  {$ONr = substr("$OFolge", 1, 3) }
		
		
# 		print "    ONr='$ONr' " ;		
 		print "    Folge='$OFolge' " ;

	  # Datenbank-Datei öffnen
		open DB_DATEI , "@DB_Datei" or die "konnte @DB_Datei nicht öffnen" ;
		# Datenbank-Datei zeilenweise einlesen
			while ( my $EZeile = <DB_DATEI> ) {
				# überspringe Kommentarzeilen oder mit führendem Leerzeichen beginnend, genauso mit nur einem Return Zeichen
				next if ( $EZeile  =~ /^\ *\n$/ or $EZeile  =~ /^\n$/ ) ;
				next unless ( $EZeile =~ /^#\s*short/ or $EZeile =~ /^#\s*SHORT/ or $EZeile =~ /^\d+\s*\d+/ ) ; 
				chomp $EZeile ;
#			  print "\$EZeile $EZeile\n" ;			

				my ( $Nr, $Folge, $Ermittler, $NrFolgeErmittler ) = split ( "\t" ,  $EZeile ) ;#=~ /^(\d+\.\d+)\ (.*)$/ ;				
#  	  	print "ONr='$ONr' # --- Nr='$Nr' --- Folge='$Folge' --- Ermittler='$Ermittler' --- NrFolgeErmittler='$NrFolgeErmittler' \n" ;

				# Wenn Ermittler gefunden 						
		  	if ($ONr eq $Nr) {
		  		# Verzeichnis mit Ermittler anlegen
		    	print "---- Ermittler: '$Ermittler'\n" ;	    	
		    	my $ErmittlerDIR = $DIR_TATORT_ERMITTLER."/".$Ermittler ;
	    		if (-d $ErmittlerDIR) {
#						print "'$ErmittlerDIR' ist vorhanden \n" ;
					}
					else {
						$AnzErmittler++;
						mkdir($ErmittlerDIR,0777) ;
#					  print "\n'$ErmittlerDIR'-Verzeichnis erstellt\n" ;
          }     
  
  				# Neuer Name für Link mit zusätzlich der FolgenNr des Ermitlers
  				my $DirFolgentitel = "(".$NrFolgeErmittler.")".$OFolge ;
  
  				# Verzeichnis mit Folge anlegen, wenn es nicht existiert
  				my $LVerzeichnis	= $ErmittlerDIR."/".$DirFolgentitel ;	
  				if (not (-d $LVerzeichnis)) { mkdir($LVerzeichnis,0777) ;}
  				
  				# Symlink erstellen
 				  my $Symlink_Filename = $DIR_TATORT_CHRONOLOGISCH."/".$OVerzeichnis."/".$OFolge."/".$ODatumElement ;
 				  my $Symlink_Link     = $DIR_TATORT_ERMITTLER."/".$Ermittler."/".$DirFolgentitel."/".$ODatumElement;
 				  symlink ($Symlink_Filename,$Symlink_Link) ;					
				}
    	}
   
 		close DB_DATEI ;	

	}

open DB_DATEI , "@DB_Datei" or die "konnte @DB_Datei nicht öffnen" ;
while ( my $EZeile = <DB_DATEI> ) {$AnzDatensaetze++;} 
close DB_DATEI ;

print "Anzahl Tatort-Folgen in DB        : $AnzDatensaetze\n" ;
print "Anzahl aufgenommene Tatort-Folgen : $AnzFolgen\n" ;
print "Verschiede Ermittler              : $AnzErmittler\n\n" ;


# VDR veranlassen, das Videoverzeichnis neu einzulesen
open(VIDEOUPDATE, ">/video0/.update");    
close(VIDEOUPDATE);

}

############################################################################
# -a Alphabetische-Links erzeugen
if ($opt_a == 1) {
	# 
	}