package Net::YMSG::ChangeState;
use base 'Net::YMSG::Event';


sub source
{
	my $self = shift;
	if (@_) {
		$self->SUPER::source(@_);
		my $yahoo = $self->get_connection;
		my $buddy = $yahoo->get_buddy_by_name($self->from);
		return unless $buddy;

		$buddy->status($self->status_code);
		if ($self->status_code == 99) {
			$buddy->custom_status($self->body);
			$buddy->busy($self->busy);
		}
	}
	$self->SUPER::source();
}

sub from
{
	my $self = shift;
	$self->_set_by_name('BUDDY_ID', shift) if @_;
	$self->_get_by_name('BUDDY_ID');
}


sub body
{
	my $self = shift;
	$self->_set_by_name('STATUS_MESSAGE', shift) if @_;
	$self->_get_by_name('STATUS_MESSAGE');
}

sub busy
{
	my $self = shift;
	$self->_set_by_name('BUSY_CODE', shift) if @_;
	$self->_get_by_name('BUSY_CODE');
}

sub status_code
{
	my $self = shift;
	$self->_set_by_name('STATUS_CODE', shift) if @_;
	$self->_get_by_name('STATUS_CODE');
}


sub code
{
	return 3
}


sub to_string
{
	my $self = shift;
	sprintf "%s: transit to '%s'", $self->{sender}, $self->{body};
}

1;
__END__
