#! /usr/bin/perl
use strict;
use warnings;

use mrw::Targets;
use mrw::Inventory;
use mrw::Util;
use Getopt::Long;
use YAML::Tiny qw(LoadFile);

my $mrwFile = "";
my $outFile = "";
my $configFile = "";

GetOptions(
"m=s" => \$mrwFile,
"c=s" => \$configFile,
"o=s" => \$outFile,
)
or printUsage();

if (($mrwFile eq "") or ($configFile eq "") or ($outFile eq ""))
{
    printUsage();
}

# Load system MRW
my $targets = Targets->new;
$targets->loadXML($mrwFile);
my @inventory = Inventory::getInventory($targets);

# Target Type : Target inventory path
my %defaultPaths = (
    "ETHERNET",
     Util::getObmcName(
         \@inventory,
         Util::getBMCTarget($targets))."/ethernet"
);

# Parse config YAML
my $targetItems = LoadFile($configFile);

# Targets we're interested in, from the config YAML
my @targetNames = keys %{$targetItems};
my %targetHash;
@targetHash{@targetNames} = ();
my @targetTypes;
my @paths;

# Retrieve OBMC path of targets we're interested in
for my $item (@inventory) {
    my $targetType = "";
    my $path = "";

    if (!$targets->isBadAttribute($item->{TARGET}, "TYPE")) {
        $targetType = $targets->getAttribute($item->{TARGET}, "TYPE");
    }
    next if (not exists $targetHash{$targetType});

    push @targetTypes, $targetType;
    push @paths, $item->{OBMC_NAME};
    delete($targetHash{$targetType});
}

for my $type (keys %targetHash)
{
    # One or more targets wasn't present in the inventory
    push @targetTypes, $type;
    push @paths, $defaultPaths{$type};
}

open(my $fh, '>', $outFile) or die "Could not open file '$outFile' $!";
print $fh "FRUS=".join ',',@targetTypes;
print $fh "\n";
print $fh "PATHS=".join ',',@paths;
close $fh;

sub printUsage
{
    print "
    $0 -m [MRW file] -c [Config yaml] -o [Output filename]\n";
    exit(1);
}
