#!/usr/bin/env perl
#
# cat pdb | pdb.pl
#

use strict;
use warnings;
use Common;

my $entry = "";
while (my $l = <STDIN>) {
  if ($l =~ /^HEADER /) {
    $entry = substr($l,62,4);
  }
  elsif ($l =~ /^COMPND /) {
    my $s = substr($l,10);
    while (my $t = <STDIN>) {
      if ($t =~ /^COMPND /) {
        $s .= substr($t,10);
      }
      else {
        $l = $t;
        last;
      }
    }
    compnd($s);
  }
  if ($l =~ /^JRNL        PMID +(\S+)/) {
    pmid($1);
  }
  elsif ($l =~ /^REMARK   1  PMID +(\S+)/) {
    pmid($1);
  }
  elsif ($l =~ /^REMARK 999/) {
    my $s = substr($l,10);
    while (my $t = <STDIN>) {
      if ($t =~ /^REMARK 999/) {
        $s .= substr($t,10);
      }
      else {
        $l = $t;
        last;
      }
    }
    remark($s);
  }
  if ($l =~ /^DBREF /) {
    dbref($l);
  }
  elsif ($l =~ /^HETNAM /) {
    hetnam($l);
  }
  if ($l =~ /^END/) {
    $entry = "";
  }
}

sub compnd {
  my $s = shift;
  my @n = ();
  $s =~ s/\s+/ /gm;
  @n = ($s =~ /\d+\.\d+\.\d+\.\d+/g);
  foreach my $ec (@n) {
    print "pdb:$entry\tec:$ec\n";
  }
}

sub pmid {
  my $pmid = shift;
  print "pdb:$entry\tpmid:$pmid\n";
}

sub dbref {
  my $s = shift;
  my $w = substr($s,25);
  $w =~ s/^\s+//;
  my @r = split /\s+/,$w;
  if ($r[0] eq 'UNP' || $r[0] eq 'SWS' || $r[0] eq 'TREMBL') {
    $r[0] = 'up';
  }
  my $db = lc $r[0];
  my $e = $r[1];
  return if $entry eq $e;
  if ($db eq 'up') {
    if (isswiss($e)) {
      print "pdb:$entry\tup:$e\n";
    }
  }
  elsif ($db eq 'pdb') {
    if (ispdb($e)) {
      print "pdb:$entry\tpdb:$e\n";
    }
  }
  elsif ($db eq 'gb') {
    if (isgenbank($e)) {
      print "pdb:$entry\tgb:$e\n";
    }
  }
  elsif ($db eq 'embl') {
    if (isembl($e)) {
      print "pdb:$entry\temb:$e\n";
    }
  }

}

sub hetnam {
  my $s = shift;
  my $w = substr($s,10,5);
  $w =~ s/\s//g;
  if ($w) {
    print "pdb:$entry\tpdb-ccd:$w\n";
  }
}

sub remark {
  my $s = shift;
  $s =~ s/,/ /gm;
  $s =~ s/\s+/ /gm;
  #my @n = ($s =~ /SWISS-PROT ENTRY NAME: (\S+)/g);
  my @n = ($s =~ /SWISS[\- ]?PROT ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isswiss($e)) {
      print "pdb:$entry\tup:$e\n";
    }
  }
  @n = ($s =~ /SWS ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isswiss($e)) {
      print "pdb:$entry\tup:$e\n";
    }
  }
  @n = ($s =~ /UNP ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isswiss($e)) {
      print "pdb:$entry\tup:$e\n";
    }
  }
  @n = ($s =~ /UNIPROT ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isswiss($e)) {
      print "pdb:$entry\tup:$e\n";
    }
  }
  @n = ($s =~ /PDB ENTRY,? (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (ispdb($e)) {
      print "pdb:$entry\tpdb:$e\n";
    }
  }
  @n = ($s =~ /GENBANK ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isgenbank($e)) {
      print "pdb:$entry\tgb:$e\n";
    }
  }
  @n = ($s =~ /GB ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isgenbank($e)) {
      print "pdb:$entry\tgb:$e\n";
    }
  }
  @n = ($s =~ /EMBL ENTRY (\S+)/g);
  foreach my $e (@n) {
    $e =~ s/[\.\,\)\:]//g;
    if (isembl($e)) {
      print "pdb:$entry\temb:$e\n";
    }
  }

}

