#!/usr/bin/perl

use warnings;
use strict;
use lib '../lib/slackget10/lib'; # FOR DEBUG ONLY !!!!
use locale ;

use slackget10::Base ;
use slackget10::File ;
use slackget10::Config ;
use Data::Dumper;
use Getopt::Long;

my $pack_dir = '/var/log/packages/';
my $verbose = undef;
my $debug = undef;
my $output = 'installed.xml';
my $ifl = undef;
my $encoding = undef;
my $conf_file = '/etc/slack-get/config.xml';

sub help{
printf("
USAGE: packdir2xml [OPTIONS]
Valid options are :
--directory : the directory you need to translate into an valid installed.xml file (default: $pack_dir)
--config-file : the slack-get's configuration file (default: $conf_file)
--verbose : make packdir2xml more verbose (default: no)
--debug : print various debug messages (default: no)
--output : modify the output file (default: $output)
--include-file-list : force the include of the file list of a package (default: no))
--encoding : change the default encoding for files (default: config file value)
--help : print this message
\n");
exit(0);
}

my $result = GetOptions ("directory=s"   => \$pack_dir,"verbose"  => \$verbose, "output=s"=>\$output,"debug"=>\$debug, "help"=>\&help,"include-file-list"=>\$ifl,"encoding=s"=>\$encoding,"config-file=s"=>\$conf_file);

die "packdir2xml: cannot find $pack_dir $!\n" unless -e $pack_dir;

my $config = new slackget10::Config ($conf_file) or die "Cannot read configuration file $conf_file (system say: $!)\n";
my $sgb = new slackget10::Base ($config);
$encoding = $config->{common}->{'file-encoding'} unless($encoding);
print "Using encoding: $encoding\n" if($verbose);
printf("compiling packages directory into data structure...") && $|++ if($verbose);
$sgb->set_include_file_list() if($ifl);
my $packagelist = $sgb->compil_packages_directory($pack_dir);
if($packagelist)
{
	print "ok\n" if($verbose);
}
else
{
	print "no\n" if($verbose);
	exit(-1);
}
printf("translating data structure into XML...") && $|++ if($verbose);
if(my $xml = $packagelist->to_XML())
{
	print "ok\n" if($verbose);
	printf("writing $output...") && $|++ if($verbose);
	my $sg_file = slackget10::File->new($output,'file-encoding' => $encoding);
	if($sg_file->Write($output,$xml))
	{
		print "ok\n" if($verbose);
	}
	else
	{
		print "no\n" if($verbose);
		exit(-1);
	}
}
else
{
	print "no\n" if($verbose);
	exit(-1);
}
if($debug)
{
	require XML::Simple;
	require Data::Dumper;

	my $xml_in = XML::Simple::XMLin($output,KeyAttr => {'package' => 'id'});
	
	print Data::Dumper::Dumper($xml_in),"\n";
}
