The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
## Copyright (C) Graham Barr
## vim: ts=8:sw=2:expandtab:shiftround

## WARNING!!!!
## WARNING!!!! This code is still very much a work in progress,
## WARNING!!!! do not depend on anything not changing
## WARNING!!!!

package AnyEvent::MongoDB::GridFS;

use Moose;
use DateTime;

use aliased 'AnyEvent::MongoDB::GridFS::File' => 'GridFSFile';
use aliased 'AnyEvent::MongoDB::Database';

has prefix => (
  is      => 'ro',
  isa     => 'Str',
  default => 'fs',
);

has database => (
  is       => 'ro',
  isa      => Database,
  required => 1,
);

has files => (
  is         => 'ro',
  init_arg   => undef,
  lazy_build => 1,
);

sub _build_files {
  my $self = shift;
  $self->database->get_collection($self->prefix . ".files");
}

has chunks => (
  is         => 'ro',
  init_arg   => undef,
  lazy_build => 1,
);

sub _build_chunks {
  my $self = shift;
  $self->database->get_collection($self->prefix . ".chunks");
}


sub fetch {
  my $self = shift;

  my %arg;
  $arg{query}  = shift if ref($_[0]);
  $arg{cb}     = shift if ref($_[0]);

  my %options = (@_, %arg);
  my $cb = $options{cb};
  $options{cb} = sub {
    $cb->(map { GridFSFile->new(doc => $_, gridfs => $self) } @_);
  };

  $self->files->find(%options);
}

__PACKAGE__->meta->make_immutable;