#!/usr/bin/env perl
use strict;
use warnings;

use POSIX qw(uname);
use MYDan;
use File::Basename;
use MYDan::Util::OptConf;
use Digest::MD5;
use MYDan::Bootstrap

$| ++;

$MYDan::Util::OptConf::THIS = 'bootstrap';

=head1 SYNOPSIS

 $0 --install

 $0 --uninstall  
         ( uninstall: Not recommended )

 $0 --reload
 $0 --run
    
=cut

my %o = MYDan::Util::OptConf->load()->get( qw( install uninstall run reload ) )->dump();

my $bootstrap = MYDan::Bootstrap->new( %o );

my $uuid = substr Digest::MD5->new->add( $ENV{MYDanPATH} = $MYDan::PATH )->hexdigest, 0, 7;

my $os = ( uname() )[0];
my $user = `id -un`;
chomp $user if $user;

if( $o{reload} )
{
    for my $name ( map{  $_ =~ /\*/ ? ( map{ basename $_ }glob "$o{lock}/$_" ): "$_.lock"} @ARGV ? @ARGV : ( '*' ) )
    {
        next unless $name =~ s/\.lock$//g;
        printf "$name: %s\n", $bootstrap->kill( $name, 'TERM' ) ? "kill" : "undo";
    }
}
elsif( $o{install} )
{
    my $rs = "$MYDan::PATH/var/ReservedSpace";
    system( "mkdir -p '$rs'" ) unless -d $rs;
    map{ system( "echo ReservedSpace > '$rs/$_'" ) unless -f "$rs/$_"; } 1..100;

    if( $os =~ /CYGWIN/ )
    {
        die "user undef" unless $user;
        my $path = "/var/cron/tabs/$user";
        system "sed -i '/mydan_bootstrap_cron_$uuid/d' $path";
        system "echo '* * * * * root $MYDan::PATH/dan/bootstrap/bin/bootstrap --run > /tmp/mydan_bootstrap_cron_$uuid.log 2>&1' >> $path"
    }
    else
    {
        system "echo '* * * * * root $MYDan::PATH/dan/bootstrap/bin/bootstrap --run' > /etc/cron.d/mydan_bootstrap_cron_$uuid";
    }
}
elsif( $o{uninstall} )
{
    if( $os =~ /CYGWIN/ )
    {
        die "user undef" unless $user;
        system "sed -i '/mydan_bootstrap_cron_$uuid/d' '/var/cron/tabs/$user'";
    }
    else
    {
        unlink "/etc/cron.d/mydan_bootstrap_cron_$uuid";
    }
    system "killall $uuid.mydan.bootstrap.master";
}
elsif( $o{run} )
{
    $bootstrap->run();
}
