#!/usr/bin/perl -w
use strict;

my $dn = `dirname $0`;chomp($dn);
my $pwd = `pwd`;chomp($pwd);
if ($dn !~ /^\//) { $dn = $pwd . "/" . $dn; }
push @INC,$dn;

use Data::Dumper;

require CanDBReader;
require SMASHData;

my @allcves = <smash/issue/CVE*.0>;

my @products = (
"SUSE Linux Enterprise Server for Teradata 10 SP3",
"SUSE Linux Enterprise Server for Teradata 11 SP1",
"SUSE Linux Enterprise Server for Teradata 11 SP3",
"SUSE Linux Enterprise Server 11 SP3 LTSS",
"SUSE Linux Enterprise Server 11 SP4",
"SUSE Linux Enterprise Server 12 SP3",
"SUSE Linux Enterprise Server for Teradata 12 SP3",
);

open(HTML,">xx.html")||die;

open(CSV,">xx.csv")||die;
print CSV "#CVE,PKG," . join(",",@products) . "\n";

print HTML "<table border=1>\n";
print HTML "<tr>\n";
print HTML "<th>CVE</th><th>Package</th>";
foreach my $product (@products) {
	print HTML "<th>$product</th>";
}
print HTML "</tr>\n";

foreach my $cve (@allcves) {
	$cve =~ s/.0$//;
	$cve =~ s/smash\/issue\///;

	#print "$cve\n";

	read_smash_issue($cve,0);

	# { CVE -> { PROD -> { PKG -> STATE } } } 
	next unless (defined($SMASHData::pkgstate{$cve}));

	my %state = %{$SMASHData::pkgstate{$cve}};

	# { PROD -> { PKG -> STATE } }

	my %xstate = ();
	foreach my $prod (keys %state) {
		my %pkgs = %{$state{$prod}};

		foreach my $pkg (keys %pkgs) {
			$xstate{$pkg}{$prod} = $pkgs{$pkg};
		}
	}
	foreach my $pkg (keys %xstate) {
		my $overallcolor = "";
		my $csvline = "$cve,$pkg,";
		my $htmlline = "";
		my %prodstate = %{$xstate{$pkg}};

		my $onetdaffected = 0;
		my $oneotherfixed = 0;

		foreach my $product (@products) {
			my $color = "";
			my $prodstate = "Unknown";
			if (defined($prodstate{$product})) {
				$prodstate = $prodstate{$product};
			}
			$csvline .= "$prodstate,";

			# red states
			if ($prodstate eq "Affected") {
				$color =  "bgcolor=\"#ff0000\"";
				$onetdaffected = 1 if ($product =~ /Teradata/i);
			}
			# green states
			if ($prodstate eq "Released")     {
				$color =  "bgcolor=\"#00ff00\"";
				$oneotherfixed = 1;
			}
			if ($prodstate eq "Not affected") { $color =  "bgcolor=\"#00ff00\""; }
			if ($prodstate eq "Already fixed") {
				$color =  "bgcolor=\"#00ff00\"";
				$oneotherfixed = 1;
			}
			$htmlline .= "<td $color>$prodstate</td>";
		}
		chop $csvline; # strip last , from cvsline
		print CSV "$csvline\n";
		my $tdcolor = "";
		$tdcolor = "bgcolor=\"#ff0000\"" if ($onetdaffected && $oneotherfixed);
		print HTML "<tr><td $tdcolor>$cve</td><td $tdcolor>$pkg</td>$htmlline</tr>\n";
	}
	#print STDERR Dumper(\%state);
}
close(CSV);
print HTML "</table>n";
close(HTML);
