use strict;
process_dirs();
#change_file_names();
exit;

#-----------------------------------------

sub process_dirs{
	
opendir(DIR, ".");
my(@dirs);
@dirs= sort(grep(/^A/,readdir(DIR)));
@dirs= ( "A010", "A015", "A016");

scalar(@dirs)> 0 or die("ERROR: no dirs");
closedir(DIR);
                
my($dir,$newDir,@elements);
foreach $dir (@dirs)
{
	print("-- $dir --\n");
	chdir($dir."/chromats") or die("cannot change to ".$dir."/chromats");
	
	change_file_names();
	chdir("../..") or die("cannot change to ../..");
}

foreach $dir (@dirs)
{
        print("-- $dir --\n");
	chdir($dir."/seqfiles") or die("cannot change to ".$dir."/seqfiles");

	change_file_names();
        chdir("../..") or die("cannot change to ../..");
}
}

#020529Sanguis19.f_G05_020529Sanguis19.f_036.ab1
#=>
#SS02052919_G05.f_G05_036.ab1

sub change_file_names{
opendir(DIR, ".");
my(@files);
@files= sort(grep(/^[csCS]/,readdir(DIR)));
scalar(@files)> 0 or die("ERROR: no files");
closedir(DIR);

my($isSeq);

my($file,$newFile,@elements);
foreach $file (@files) 
{   
	$newFile = lc($file);
	
	$isSeq = ($newFile =~ "seq");
	
	if (length($newFile) == 14 and !$isSeq ) { next; }
	if (length($newFile) == 18 and $isSeq ) { next; }	
 
	#020529SS19.f_G05_020529SS19.f_036.ab1
	$newFile =~ s/sanguis/ss_/g;
	$newFile =~ s/ss/ss_/g;
	$newFile =~ s/cp/cp_/g;
	$newFile =~ s/aa/a2/g;
	$newFile =~ s/a/_a/g;
	$newFile =~ s/r/_r/g;
	$newFile =~ s/f/_f/g;
	$newFile =~ s/-/_/g;

        $newFile =~ s/\s//g;
        #$newFile =~ s/ss/ss-/g;
        #$newFile =~ s/-t//g;
        $newFile =~ s/t//g;
        $newFile =~ s/k//g;
        $newFile =~ s/m13f/f/g;
        $newFile =~ s/m13r/r/g;
        $newFile =~ s/m13/r/g;
	$newFile =~ s/oo/00/g;
	$newFile =~ s/q//g;
	$newFile =~ s/a0129/a129/g;

	@elements=split(/[_\.]+/,$newFile);
	
	$newFile=join(":",@elements);

	my($element, $date, $plate, $proj);
	foreach $element (@elements[0..2])
	{
		if (length($element)>=6 and substr($element,0,2) eq "02")
		{
			$date=substr($element,0,6);
			if(length($element)>6) { $plate=substr($element,6); }
		}
		elsif ($element eq "cp") { $proj=$element;} 
		elsif ($element eq "ss") { $proj=$element;}
		elsif ($element =~ /a\d{3}/) { $plate=$element;}
	}

	my($direction, $position);
	foreach $element (@elements[2..scalar(@elements)])
	{
		if ($element eq "f") 	 { $direction=".b1";}
		elsif ($element eq "f1") { $direction=".b1";}
		elsif ($element eq "b1") { $direction=".b1";}
		elsif ($element eq "r")  { $direction=".g1";}
		elsif ($element eq "r1") { $direction=".g1";}
		elsif ($element eq "g1") { $direction=".g1";}
		elsif ($element eq "t")  { $direction=".t1";}
		elsif ($element eq "s")  { $direction=".s1";}
		elsif ($element =~ /[a-z]\d{2}/) { $position=$element;}
	}

	defined($proj)                             or die("ERROR: project undefined: $file");
	defined($plate) and length($plate)==4 and $plate =~ /a\d{3}/     
		or die("ERROR: plate \($plate\) undefined: $file");
	defined($position) and length($position)==3 and  $position =~ /[abcdefgh]\d{2}/  
		or die("ERROR: position \($position\) undefined: $file");
	defined($direction) and $direction =~ /\.[bgts]1/ 
		or die("ERROR: direction \($direction\) undefined: $file");

	$newFile =$proj."_".$plate."_".$position.$direction;
	if($isSeq) { $newFile =$newFile."\.seq"; }
	
	#print ("  " ,$file," => ", $newFile, "\n");
	print ( $newFile, "\n");
	if($ARGV[0] eq "r") { rename($file, $newFile);}
}
}		
