#!/usr/bin/env  perl
########################################################################
# housekeeping
########################################################################

use 5.006;
use strict;

use File::Basename  qw( basename dirname    );
use List::MoreUtils qw( zip                 );
use List::Util      qw( pairs pairmap       );

use FindBin qw( $Bin );
use lib "$Bin/../lib";
use Test::KwikHaks;

########################################################################
# package variables
########################################################################

$\      = "\n";

my $md  = Test::KwikHaks->can( 'mkdir_if' )
or die "Botched Test::KwikHaks: cannot 'mkdir_if'.\n";

my $glob    = '../bin/*_t';

my $work_d  = dirname $Bin;
my $dyn_b   = 'dynamic';

$work_d     = $md->( $work_d => $dyn_b );

my @v_stringz
= do
{
    my @test_verz
    = qw
    (
        5.5.3
        5.888.888
        5.999.999
    );

    my @formatz
    = map
    {
        (   $_, 'v' . $_ )
    }
    qw
    (
        %d.%d.%d
        %d.%03d.%03d
        %d.%03d%03d
        %d.%03d_%03d
    );

    sort
    {
        $a cmp $b
    }
    pairmap
    {
        sprintf $a => @$b
    }
    map
    {
        my @valz    = ( [ split /\D/ ] ) x @formatz;

        zip @formatz, @valz
    }
    @test_verz;
};

########################################################################
# symlink all of the test templates to version-specific paths.
########################################################################

chdir $work_d
or die "Failed chdir: $work_d, $!";

my @testz   = glob $glob
or die "Botched $0: no files like '$glob'.\n";

print join "\n#\t" => '# Tests:', @testz;
print join "\n#\t" => '# Versions:', @v_stringz;

for my $path ( @testz )
{
    print "Link: '$path'.";
    
    my $base    = basename $path => '_t';
    my $pref    
    = do
    {
        my $i   = index $base, '-';
        substr $base, 0, $i;
    };

    print "Cleanup: '$pref-*'.";

    unlink "$pref-*.t";

    symlink $path => "$base-$_.t"
    for @v_stringz;
}

exit 0;
