#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;
use Data::Dumper;

my $basedir = $ARGV[0] || "/lib/discover";

my %pkgmap;
for my $bus ("pci", "usb") {
    my $ref = XMLin("$basedir/$bus-device.xml");
    for my $device (@{$ref->{'device'}}) {
#        print Dumper($device);

        if (exists $device->{'data'}) {
            my $entries;
            if ("ARRAY" eq ref $device->{'data'}) {
                $entries = @{$device->{'data'}};
            } else {
                $entries = $device->{'data'};
            }
            for my $data ($entries) {
                if ("HASH" eq ref $data && "package" eq $data->{'class'}) {
#                    print Dumper($data);
                    my $vendor = uc($device->{'vendor'});
                    my $model = uc($device->{'model'});
                    my @pkgentries;
#                    print Dumper($data->{data}[0]->{'data'});
                    if ("ARRAY" eq ref $data->{data}[0]->{'data'}) {
                        @pkgentries = @{$data->{data}[0]->{'data'}};
                    } else {
                        @pkgentries = $data->{data}[0]->{'data'};
                    }

#                    print Dumper(@pkgentries);

                    for my $pkgentry (@pkgentries) {
                        my $pkglist = $pkgentry->{'content'};
                        for my $pkg (split(/ /, $pkglist)) {
                            my $modalias;
                            if ("usb" eq $bus) {
                                $modalias = "usb:v${vendor}p${model}d*";
                            } elsif ("pci" eq $bus) {
                                $modalias = "pci:v0000${vendor}d0000${model}sv*";
                            } else {
                            }
                            if (exists $pkgmap{$pkg}) {
                                push(@{$pkgmap{$pkg}}, $modalias);
                            } else {
                                $pkgmap{$pkg} = [$modalias];
                            }
                        }
                    }
                }
            }
        }
    }
}

for my $pkg (sort keys %pkgmap) {
    print "Package: $pkg\n";
    print "Modaliases: $pkg(".join(", ", sort @{$pkgmap{$pkg}}), ")\n";
    print "\n";
}
