package Net::FSP::Entry;
use strict;
use warnings;
use Carp;

use overload q{""} => sub {
	return $_[0]->short_name;
};
our $VERSION = $Net::FSP::VERSION;

sub new {
	my ($class, $fsp, $name, %attributes) = @_;
	$name =~ s{ \A / }{}mx;
	return bless {
		fsp  => $fsp,
		name => $name,
		%attributes,
	}, $class;
}

for my $subname (qw/name type size time link/) {
	no strict 'refs';    ##no critic strict
	*{$subname} = sub {
		return $_[0]{$subname};
	};
}

sub move {
	my ($self, $new_name) = @_;
	$self->{fsp}->move_file($self->{name}, $new_name);
	return;
}

sub short_name {
	my $self = shift;
	$self->{name} =~ / ( [^\/]* ) \z /mx or croak "Couldn't determine short_name";
	return $1;
}

sub accept;
sub remove;
sub download;

1;

__END__

=head1 NAME

Net::FSP::Entry - An FSP directory entry

=head1 VERSION

This documentation refers to Net::FSP version 0.13

=head1 DESCRIPTION

In FSP there are two kinds of entries, files and directories. This is the
base class of the corresponding types: Net::FSP::File and Net::FSP::Dir.

=head1 METHODS

=over 4

=item name()

Returns the full name of the entry.

=item short_name

Returns the basename of the entry.

=item type()

Returns I<file> or I<dir>, depending on the type of entry.

=item move($new_location)

Move this entry to a new location.

=item remove()

Remove this entry.

=item download($sink = $self->name)

Download this entry.

=item size()

Returns the size (in bytes) of the entry.

=item time()

Returns the modification time of the entry (in seconds since UNIX epoch).

=item link()

Returns the location the symlink is pointing to, or undef if the entry is not a
symlink.

=item accept($visitor)

Accept a visitor. This visitor must be a subref.

=back

=head1 AUTHOR

Leon Timmermans, fawaka@gmail.com

=head1 LICENSE AND COPYRIGHT

Copyright (c) 2005, 2008 Leon Timmermans. All rights reserved.

This module is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.

=begin ignore

=over 4

=item new

=back

=cut