sub gen_fh {
    my $fh = shift;
    return sub { $fh; };
}

sub logger {
    my $stdout = shift;
    my $fh = shift;
    if($stdout == 1) {
	return sub {
	    my $msg = shift;
	    print STDOUT "$msg\n";
	    print $fh "$msg\n";
	};
    }
    return sub {
	my $msg = shift;
	print $fh "$msg\n";
    };
}

# Return the (log, perform, title) functions for interactive or cron modes
sub init_pipeline {
    my $filehandle = shift;
    my $state      = shift;
    my $fh = gen_fh($filehandle);
    my $out_fh = ($state eq "interactive") ? 1 : 0;
    my $log_it = logger($out_fh, $filehandle);
    return ( 
	     sub {
		 my $msg = shift;
		 &$log_it("\t# " . $msg);
	     },
	     sub {
		 my $cmd = shift;
		 &$log_it("\t" . $cmd);
		 system($cmd);
	     },
# Perform with title message
#	     sub {
#	         my $title = shift;
#		 my $cmd = shift;
#		 &$log_it("\t# " . $title);
#		 &$log_it("\t" . $cmd);
#		 system($cmd);
#	     },
	     sub {
		 my $title = shift;
		 my $ct  = scalar(localtime);
		 my $cts = "$ct (JST) - ";
		 my $ntitle = "\n$cts $title";
		 &$log_it($ntitle);
	     });
}

1;
