package Mojo::InfluxDB::Result;
# ABSTRACT: Result container for queries
$Mojo::InfluxDB::Result::VERSION = '0.1';
use Mojo::Base -base, -signatures;
use Mojo::Collection qw/ c /;
use Mojo::InfluxDB::Row;

has src => sub { die "This result is empty" };
has 'time_zone';

for my $field (qw/ series messages error statement_id /) {
    has $field => sub($self){ $self->src->{$field} };
}

has series => sub($self) {
    c( $self->src->{series}->@* )->map(sub{
        Mojo::InfluxDB::Row->new(
            src       => $_,
            time_zone => $self->time_zone
        )
    })
};

sub points ( $self ) {
    $self->series->map(sub{ $_->points })->flatten;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Mojo::InfluxDB::Result - Result container for queries

=head1 VERSION

version 0.1

=head1 DESCRIPTION

You will get this objects form L<InfluxDB> query methods. This is a container of query results.

=head1 ATTRIBUTES

=head2 src

this is where L<InfluxDB::Result> will store the raw data retrieved for this row. Most attributes of this class will read from here.

=head2 time_zone

an optional time_zone that will be passed into every L<Mojo::InfluxDB::Point> returned by points().

=head2 names

=head2 tags

=head2 columns

=head2 values

=head2 partial

=head2 points

A L<Mojo::Collection> of L<Mojo::InfluxDB::Point>.

=head1 AUTHOR

Gonzalo Radio <gonzalo@gnzl.net>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2020 by Gonzalo Radio.

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

=cut