#!/usr/bin/perl -w -I../lib

use strict;
#use Bluelinq::File::Sauce;
use Bluelinq::Sausalito;
use Data::Dumper;
use Getopt::Long;

my($DEBUG,$TEMPDIR,$opt,$options,$filename,$file,$obj);
$DEBUG = 0;
$TEMPDIR = "/tmp/blqtemp.$$";

$opt = {};
$options = [
	'verbose+'		=>	\$opt->{'verbose'},
	'location:s'		=>	\$opt->{'location'},
	'size:i'		=>	\$opt->{'size'},
	'vendor:s'		=>	\$opt->{'vendor'},
	'xml'			=>	\$opt->{'xml'},
	'plist'			=>	\$opt->{'plist'},
	'metadir:s'		=>	\$opt->{'metadir'},
	'quiet:i'		=>	sub { $opt->{'verbose'} = 0 }
];

# main()
GetOptions(@$options);
processOpts();
#$file = Bluelinq::File::Sauce->new(@{$obj});
#$file = Bluelinq::File::Sausalito->new(@{$obj});
$file = Bluelinq::factory($filename,@{$obj});
$file->verbose($DEBUG);
# intialize file
$file->init();
# unpack file
$file->unpack();
$file->get_meta_info();

# process command-line args
if($opt->{'location'})	{ $file->Location($opt->{'location'}) }
# replace vendor (only for sauce pkgs)
if($opt->{'vendor'}) {
	$file->Vendor($opt->{'vendor'});
}
if($opt->{'size'})	{ $file->Size($opt->{'size'}) }
# only sausalito pkgs have metadirs
if($opt->{'metadir'} && (ref($file) =~ m/sausalito/i)) {
	$file->write_metadir($opt->{'metadir'});
}
# print meta information in format requested
if ($opt->{'plist'})	{ $file->dumpmeta() }
if ($opt->{'xml'})	{ $file->xml_print() }

#print Dumper($file);
exit(0);



###### SUBROUTINES BELOW ######
sub processOpts {
	checkUsage();
	# set DEBUG if given. it has a max value of 2
	if ($opt->{"verbose"}) { $DEBUG = $opt->{"verbose"} }
	if ($DEBUG > 2) { $DEBUG = 2; }
	push(@{$obj},"filename",$filename);
	#if($opt->{"location"})	{ push(@{$obj},"location",$opt->{"location"}) }
	#if($opt->{"vendor"})	{ push(@{$obj},"vendor",$opt->{"vendor"}) }
}


sub checkUsage {
	if ( (!($opt->{"xml"}) && !($opt->{"plist"})) ||
				($opt->{"xml"} && ($opt->{"plist"})) ) {
		&usage(); die "Specify exactly one output format or another";
	}
	if (!($filename = shift @ARGV)) {
		&usage(); die "You must supply a filename to $0";
	}
}

sub usage {
	print <<"EOU";
usage: $0 [--verbose]
	  [--quiet]
          [--location url]  url of package
          [--vendor vendor] package vendor
          [--metadir dir]   output metadir to dir
          [--xml]           output xml
          [--plist]         output packing_list
          [filename]
EOU
}

