package Games::Lacuna::Task::Role::Client;

use 5.010;
use Moose::Role;

use Games::Lacuna::Task::Client;

our $DEFAULT_DIRECTORY = Path::Class::Dir->new($ENV{HOME}.'/.lacuna');

has 'configdir' => (
    is              => 'rw',
    isa             => 'Path::Class::Dir',
    coerce          => 1,
    documentation   => 'Path to the lacuna directory [Default '.$DEFAULT_DIRECTORY.']',
    default         => sub { return $DEFAULT_DIRECTORY },
);

has 'client' => (
    is              => 'ro',
    isa             => 'Games::Lacuna::Task::Client',
    traits          => ['NoGetopt'],
    lazy_build      => 1,
    handles         => [qw(get_cache set_cache clear_cache request paged_request empire_name build_object storage_prepare storage_do get_stash has_stash stash)]
);

sub _build_client {
    my ($self) = @_;
    
    # Build new client
    my $client = Games::Lacuna::Task::Client->new(
        loglevel        => $self->loglevel,
        configdir       => $self->configdir,
        debug           => $self->debug,
    );
    
    return $client;
}

no Moose::Role;
1;

=encoding utf8

=head1 NAME

Games::Lacuna::Role::Client - Client glue code

=head1 METHODS

=head2 configdir

Path to the config directory.

=head2 client

L<Games::Lacuna::Task::Client> object. Most public methods in this class
are available via method delegation.

=cut
