#!/usr/bin/perl

my @lines = ();
my %nameh = ();

while (<>) {
    s/\15//g;
    chomp;
    #s/CHEBI/XCHEBI/g;
    push(@lines, $_);
    $nameh{$1} = 1 if /^name:\s+(.*)/;
}
foreach (@lines) {
    if (/^id:\s*(\S+)/) {
        $id = $1;
    }
    if (/synonym: "(.*)" EXACT/) {
        $exact{$1}++;
    }
    if (/synonym: "(.*)" RELATED/ && $_ !~ /FORMULA/) {
        $related{$1}{$id}++;
    }
    if (/name:\s+(.*)/) {
        $exact{$1}++;
    }
}

foreach (@lines) {
    if (/^id:\s+(.*)/) {
        $id = $1;
    }
    elsif (/^name:\s+(.*)s$/) {
        my $name = $1;
        if (allowed($name."s")) {
            # do nothing
        }
        elsif (!$nameh{$name}) {
            print STDERR "$1s =>$name\n";
            $_ = "name: $name";
        }
        else {
            print STDERR "*Singular and plural exist: $name [will not touch]\n";
        }
    }
    elsif (/^synonym: "(.*)" RELATED/ && $_ !~ /FORMULA/) {
        if ($exact{$1}) {
            print STDERR "$id :: already have EXACT: \"$1\"\n";
        }
        elsif (keys (%{$related{$1}}) > 1) {
            print STDERR "$id :: ambiguous RELATED \"$1\"\n";
        }
        else {
            print STDERR "$id :: promoting RELATED->EXACT: \"$1\"\n";
            s/RELATED/EXACT/;
        }
    }
    print "$_\n";
}

sub allowed {
    return 1 if /phoro?us$/;
    return 1 if /His$/;
    return 1 if /Cys$/;
    return 1 if /Lys$/;
    return 1 if /As$/;
    return 1 if /CoA$/;
    return 0;
    
}
