#! /usr/bin/env perl

use strict;
use warnings;
use Carp;
use NGS::Tools::BAMSurgeon;
use FindBin qw($Bin);
use YAML qw(LoadFile);
use Getopt::Long;
use Pod::Usage;

my ($opt_help, $opt_version, $opt_config);

GetOptions(
	"help!" => \$opt_help,
	"version" => \$opt_version,
	'config:s' => \$opt_config
	);


sub print_usage {
	my $status = shift;
	print("\nOptions:\n\t--help|-h\tPrint this help\n\t--version|-v\tPrint the version of NGS::Tools::BAMSurgeon\n\t--config|-c\tSpecify the path to the YAML config file\n");
	exit($status);
	}

sub print_version {
	print("\nNGS::Tools::BAMSurgeon v1.0.0\n");
	exit(0);
	}

print_usage(0) if $opt_help;
print_version() if $opt_version;

if (!defined($opt_config)) {
	print("\nPlease specify a YAML config file.\n");
	print_usage(1);
	}

my $config = LoadFile($opt_config) or croak("Could not load YAML config file: $!");

my $bamsurgeon = NGS::Tools::BAMSurgeon->new(
	working_dir => $config->{working_dir},
	config => $opt_config,
	somatic_profile => $config->{somatic_profile},
	germline_profile => $config->{germline_profile},
	bam => $config->{bam},
	tumour_name => $config->{tumour_name},
	sex => $config->{sex},
	gpercent => $config->{gpercent},
	seed => $config->{seed},
	minvaf => $config->{minvaf},                
	maxvaf => $config->{maxvaf},                
	vafbeta1 => $config->{vafbeta1},            
	vafbeta2 => $config->{vafbeta2},            
	indel_minlen => $config->{indel_minlen},          
	indel_maxlen => $config->{indel_maxlen},         
	indel_types => $config->{indel_types},   
	sv_minlen => $config->{sv_minlen},          
	sv_maxlen => $config->{sv_maxlen},         
	sv_types => $config->{sv_types},      
	phasing => $config->{phasing},
	redochrs => $config->{redochrs}
	);

$bamsurgeon->run(
	splitbam => $config->{stages}->{splitbam},
	preparef => $config->{stages}->{preparef},
	pickgermmut => $config->{stages}->{pickgermmut},
	germsim => $config->{stages}->{germsim},
	trinucleotidegenome => $config->{stages}->{trinucleotidegenome},
	generatecallable => $config->{stages}->{generatecallable},
	picksomaticmut => $config->{stages}->{picksomaticmut},
	picktrinucleotides => $config->{stages}->{picktrinucleotides},
	splitsubclones => $config->{stages}->{splitsubclones},
	somaticsim => $config->{stages}->{somaticsim},
	makevcf => $config->{stages}->{makevcf},
	extractleafs => $config->{stages}->{extractleafs},
	mergephases => $config->{stages}->{mergephases},
	mergechromosomes => $config->{stages}->{mergechromosomes},
	mergefinal => $config->{stages}->{mergefinal},
	allelecount => $config->{stages}->{allelecount}
	);
