package Flickr::API::People;

use strict;
use warnings;
use Carp;

use parent qw( Flickr::API );
our $VERSION = '1.27';


sub _initialize {

    my $self=shift;
    my $check;


        my $rsp = $self->execute_method('flickr.auth.oauth.checkToken');

        if (!$rsp->success()) {

            $rsp->_propagate_status($self->{flickr}->{status});

            carp "\nUnable to validate token. Flickr error: ",
                $self->{flickr}->{status}->{error_code}," - \"",
                $self->{flickr}->{status}->{error_message},"\" \n";

            $self->_set_status(0,"Unable to validate token, Flickr API call not successful.");

        }
        else {

            $check = $rsp->as_hash();
            $self->{flickr}->{token} = $check->{oauth};
            $self->_set_status(1,"Token validated.");

        }

    return;

}

sub findByEmail {

    my $self  = shift;
    my $email = shift;

    $self->clear_user;

    unless ($email) { croak 'Usage: $api->findByEmail("an-email-address")'; }

    my $rsp = $self->execute_method('flickr.people.findByEmail',{'find_email' => $email});
    $rsp->_propagate_status($self->{flickr}->{status});

    if ($rsp->success == 1) {

        my $eresult = $rsp->as_hash();
        $self->_set_status(1,"flickr.people.findByEmail successfully found " . $email);
        $self->{flickr}->{user} = $eresult->{user};

    }
    else {

        $self->_set_status(0,"Unable to find user with: " . $email);

    }

    return $self->username;
}

sub findByUsername {

    my $self = shift;
    my $user = shift;

    $self->clear_user;

    unless ($user) { croak 'Usage: $api->findByUsername("a_user_name")'; }

    my $rsp = $self->execute_method('flickr.people.findByUsername',{'username' => $user});
    $rsp->_propagate_status($self->{flickr}->{status});

    if ($rsp->success == 1) {

       my $uresult = $rsp->as_hash();
       $self->_set_status(1,"flickr.people.findByUsername successfully found " . $user);
       $self->{flickr}->{user} = $uresult->{user};

    }
    else {

        $self->_set_status(0,"Unable to find user with: " . $user);

    }

    return $self->username;
}


sub perms {
    my $self=shift;
    return $self->{flickr}->{token}->{perms};
}

sub perms_caller {
    my $self=shift;
    return $self->{flickr}->{token}->{user}->{username};
}

sub perms_nsid {
    my $self=shift;
    return $self->{flickr}->{token}->{user}->{nsid};
}

sub perms_token {
    my $self=shift;
    return $self->{flickr}->{token}->{token};
}

sub nsid {
    my $self=shift;
    return $self->{flickr}->{user}->{nsid};
}

sub username {
    my $self=shift;
    return $self->{flickr}->{user}->{username};
}

sub user {
    my $self=shift;
    return $self->{flickr}->{user};
}

sub clear_user {
    my $self=shift;
    delete $self->{flickr}->{user};
    return;
}



1;

__END__


=head1 NAME

Flickr::API::People - Perl interface to the Flickr API's flickr.people.* methods.

=head1 SYNOPSIS

  use Flickr::API::People;

  my $api = Flickr::API::People->new({'consumer_key' => 'your_api_key'});

or

  my $api = Flickr::API::People->import_storable_config($config_file);


=head1 DESCRIPTION

This object encapsulates the flickr people methods.

C<Flickr::API::People> is a subclass of L<Flickr::API>, so you can access
Flickr's people information easily.


=head1 SUBROUTINES/METHODS

=over

=item C<findByEmail()>

Populates user info with that found for the given email

=item C<findByUsername()>

Populates user info with that found for the given username

=item C<perms()>

Returns the permission returned by checking this supplied token

=item C<perms_caller>

Returns the username for which the permission applies

=item C<perms_token>

Returns the token for which the permission applies

=item C<perms_nsid>

Returns the nsid for which the permission applies

=item C<nsid()>

Returns the nsid of the supplied mail or username

=item C<username()>

Returns the username of the supplied mail or username

=back


=head1 LICENSE AND COPYRIGHT

Copyright (C) 2015, Louis B. Moore

This program is released under the Artistic License 2.0 by The Perl Foundation.

Original version was Copyright (C) 2005 Nuno Nunes, C<< <nfmnunes@cpan.org> >>
This version is much changed and built on the Flickr::API as it appears in
2015. Many thanks to Nuno Nunes for getting this ball rolling.

=head1 SEE ALSO

L<Flickr::API>.
L<Flickr|http://www.flickr.com/>,
L<http://www.flickr.com/services/api/>
L<https://github.com/iamcal/perl-Flickr-API>


=cut
