#!/usr/bin/perl -w

use strict;
use Data::Dumper;
use File::Basename;
use Getopt::Long qw(:config bundling no_ignore_case);
use HTTP::Request::Common;
use LWP::UserAgent;
use Mojo::DOM;

$|=1;

my %cfg = (
            url     => '',
	    dd_list => '/usr/bin/dd-list',
            debug   => 0,
            verbose => 0,
            help    => 0,
          );

my $result = GetOptions(
                         'u|url=s'     => \$cfg{url},
                         'D|dd-list=s' => \$cfg{dd_list},
                         'd|debug'     => \$cfg{debug},
                         'v|verbose'   => \$cfg{verbose},
                         'h|help'      => \$cfg{help},
                       );

if(!$result || $cfg{help} || !$cfg{url}) {
	print STDERR "\n" if(!$result);

	print "Usage: ". basename($0) ." [OPTIONS]\n\n";
	print "Options:\n";
	print "-u, --url <URL>       URL to transition tracker\n";
	print "-D, --dd-list <PATH>  Path to dd-list executable\n";
	print "-d, --debug           Enable debug output\n";
	print "-v, --verbose         Enable verbose output\n";
	print "-h, --help            Display this usage information\n";

	exit 1;
}

my $ua = new LWP::UserAgent(agent => basename($0));

print "Retrieving $cfg{url}\n" if($cfg{verbose});

my $req = new HTTP::Request(GET => $cfg{url});

my $res = $ua->request($req);
if($res->is_success) {
	my $content = $res->content;

	my $dom = Mojo::DOM->new($content);

	my @packages = ();
	foreach my $tr ($dom->find('div.content table tr')->each) {
		if(
		    $tr->child_nodes->first->tag eq 'th' &&
		    $tr->child_nodes->first->text =~ /Dependency level/
		) {
			print "Skipping Dependency level\n" if($cfg{verbose});

			next;
		}

		my $name = $tr->child_nodes->first->child_nodes->first->text;

		if(!$name) {
			print STDERR "Error: Failed to find package name!\n";
			print STDERR $tr->content ."\n";
			exit 1;
		}

		push @packages, $name;
	}

	print "packages:\n".Dumper(\@packages) if($cfg{debug});

	my @cmd = (
	            $cfg{dd_list},
	            '-i',
	          );

	open(DDLIST, '|-', @cmd) || die "Error: Failed to execute: @cmd ($!)";
	foreach my $package (sort @packages) {
		print DDLIST "$package\n";
	}
	close(DDLIST);
}
else {
	print STDERR "Error: Request failed! ($cfg{url})\n";
	print STDERR "HTTP Status: ".$res->code." ".$res->message."\n";
	print STDERR $res->content if($res->content);

	exit 1;
}

