#!/usr/bin/perl

use strict;
use warnings;


use lib qw(Core);
use lib qw(Classes);

use Exporter;
use LocalConfiguration;


my $target = $ARGV[0];
my @targets = ();

if (defined($target) && $target =~ m/^T[0-9]{4}(s[1-9]){0,1}$/){
   push(@targets,$target);
#  warn ("Improper name of target: should be in format T0123 or R0123\n");
} else { # run on all targets which were copied domain 0 as 1
  my $targetDir = sprintf("%s", $LOCAL_CONFIG->{DATA_TARGETS_DIR});
  opendir DIR, $targetDir || die ("Couldn't open dir $targetDir\n");
  while(my $file = readdir(DIR)){
      if ($file =~ m/^\./) {next;}
      if ($file !~ m/^T[0-9]{4}(s[1-9]){0,1}-D1\.pdb$/) {next;}
      if ((-l "$targetDir/$file" and -f readlink("$targetDir/$file")) or $file eq "T0644-D1.pdb" ){
	 $target = $file;
	 $target =~ s/-D1\.pdb$//;
	 push (@targets, $target);
      }
  }
  closedir(DIR);
}
@targets = sort @targets;
foreach my $t (@targets){
  print "$t\n";
}

#exit;
my @targets2run = ();

# create links for taregts and create array of targets to proceed
foreach my $target (@targets){
   my $target2run = &link_templates($target);
   if (defined($target2run)){
	print $target2run."\n";
	push (@targets2run, $target2run);
   }
}

# download to database targets2run
foreach my $target (@targets2run){
   print ("cd /local/Projects/Perl/casp13/src/scripts/results_scripts ; perl templates_upload.pl $target-D1\n");
   system ("cd /local/Projects/Perl/casp13/src/scripts/results_scripts ; perl templates_upload.pl $target-D1");
}


exit; 

sub link_templates {
    my ($target) = @_;
    my $target_link = sprintf("%s/%s-D1.pdb",$LOCAL_CONFIG->{DATA_TARGETS_DIR}, $target);
    my $parent_target = sprintf("%s/%s.pdb",$LOCAL_CONFIG->{DATA_TARGETS_DIR}, $target);
    my $diff = undef;
    if (-e $parent_target && -e $target_link) {
	$diff = `diff $target_link $parent_target`;
        $diff =~ s/\s+//g;
    }else{
         return undef;
    }
    # check if target link exists and if it points at true file
    if ((-l $target_link && -f readlink($target_link))||($diff eq '')){
	
	my $summary_link = sprintf("%s/TEMPLATES/%s-D1.csv.filtered", $LOCAL_CONFIG->{RESULTS_DIR}, $target);
	print $summary_link."\n";
	if (-e $summary_link){
		return;
	}
	my $summary_file = sprintf("%s/TEMPLATES/%s.csv.filtered", $LOCAL_CONFIG->{RESULTS_DIR}, $target);
	if (! -f $summary_file){
		return undef;
	}
	print ("ln -s $summary_file $summary_link\n");
	system("ln -s $summary_file $summary_link");

	my $resDir = sprintf("%s/TEMPLATES/%s", $LOCAL_CONFIG->{RESULTS_DIR}, $target);
	my $linkDir = sprintf("%s/TEMPLATES/%s-D1", $LOCAL_CONFIG->{RESULTS_DIR}, $target);
	if (! -d $resDir){
		return undef;
	}
	if (-d $linkDir){
		print ("rm -rf $linkDir\n");
		system("rm -rf $linkDir");
	}
	print ("mkdir $linkDir\n");
	system("mkdir $linkDir");
	print ("chmod 775 $linkDir\n");
	system("chmod 775 $linkDir");
	print ("chgrp users $linkDir\n");
	system("chgrp users $linkDir");
	if(opendir DIR, $resDir ){
		my @files = ();
		while(my $file = readdir(DIR)){
			if ($file =~ m/^\./){next;}
			push(@files,$file);
		}
		closedir(DIR);

		foreach my $file (@files){
			my $link = $file;
			$link =~ s/$target/$target-D1/g;
			my $src_file = sprintf("%s/%s",$resDir,$file);
			my $desc_link = sprintf("%s/%s",$linkDir,$link);
			print ("ln -s $src_file $desc_link\n");
			system("ln -s $src_file $desc_link");
		}
	} else {
	   warn "Couldn't open dir $resDir";
	   return undef;
	}
	return $target;
    }
    return undef;
}

