package PGP::Certificate::Userid;

use strict;

use Carp;

sub new {
    my ($classname, $packet) = @_;

    bless {
	"packet" => $packet,
    }, $classname;
}

sub add_signature {
    my ($self, $sig, $keyid) = @_;

    if ($keyid eq $sig->issuer) {
	if (!$self->{"self_signature"} ||
	    $self->{"self_signature"}->created < $sig->created) {
	    $self->{"self_signature"} = $sig;
	}
    } else {
	if (!$self->{"other_signatures"}->{$sig->issuer} ||
	    ($self->{"other_signatures"}->{$sig->issuer}->created <
	     $sig->created)) {
	    $self->{"other_signatures"}->{$sig->issuer} = $sig;
	}
    }
}

sub packet {
    my ($this) = @_;
    $this->{"packet"};
}

sub name {
    my ($self) = @_;

    $self->{"packet"}->name;
}

sub self_signature {
    my ($self) = @_;

    $self->{"self_signature"};
}

sub primary_userid {
    my ($self) = @_;

    ($self->self_signature &&
     $self->self_signature->subpacket("primary_userid"));
}

sub other_signatures {
    my ($self) = @_;

    [ sort { $b->created <=> $a->created }
      (values %{$self->{"other_signatures"}}) ];
}

sub signatures {
    my ($self) = @_;

    if ($self->{"self_signature"}) {
	return ([ $self->{"self_signature"},
		  sort { $b->created <=> $a->created }
		  (values %{$self->{"other_signatures"}}) ]);
    } else {
	return ([ sort { $b->created <=> $a->created }
		  (values %{$self->{"other_signatures"}}) ]);
    }
};

1;
