The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Net::Fastly::Invoice;

use strict;
use base qw(Net::Fastly::Model);

Net::Fastly::Invoice->mk_accessors(qw(service_id service_name start_time end_time total regions service));

=head1 NAME

Net::Fastly::Invoice - - a representation of a Fastly monthly invoice

=head1 ACCESSORS

=head2 service_id

The id of the service this invoice is for

=head2 service_name

The id of the service this invoice is for

=head2 start_time

The earliest date and time this invoice covers

=head2 end_time

The latest date and time this invoice covers

=head2 total

The total for this invoice in US dollars

=head2 regions

A hash reference with all the different regions and their subtotals

=cut

# Not included because trying not to have DateTime as a dependency
# use DateTime::Format::ISO8601;
# =head2 start
# 
# The I<start_time> as a DateTime object
# 
# =cut
# sub start {
#     my $self = shift;
#     DateTime::Format::ISO8601->parse_datetime($self->start_time)->set_time_zone('UTC');
# }
# 
# =head2 end 
# 
# The I<end_time> as a DateTime object
# 
# =cut
# sub end {
#     my $self = shift;
#     DateTime::Format::ISO8601->parse_datetime($self->end_time)->set_time_zone('UTC');    
# }


sub _get_path {
    my $class = shift;
    my %opts  = @_;
    
    my $url  = "/billing";
    if ($opts{service_id}) {
        $url .= "/service/".$opts{service_id};
    }
    if ($opts{year} && $opts{month}) {
        $url .= "/year/".$opts{year}."/month/".$opts{month};
    }
    return $url;
}

sub _list_path   { shift->_get_path(@_) }
sub _post_path   { die "You can't POST to an invoice"   }
sub _put_path    { die "You can't PUT to an invoice"    }
sub _delete_path { die "You can't DELETE to an invoice" }


=head2 save

Save this object. Equivalent to

   $fastly->update_<class>($object);

=cut
sub save   { die "You can't save an invoice" }

=head2 delete

Delete this object. Equivalent to

   $fastly->delete_<class>($object);

=cut
sub delete { die "You can't delete an invoice" }

package Net::Fastly;

sub get_invoice {
    my $self  = shift;
    my $year  = shift;
    my $month = shift;
    my %opts  = ();
    if ($year && $month) {
        $opts{year}  = $year;
        $opts{month} = $month;
    }
    my $hash = $self->client->_get(Net::Fastly::Invoice->_get_path(%opts));
    return undef unless $hash;
    return Net::Fastly::Invoice->new($self, %$hash);
}

1;