package Business::CPI::Item;
# ABSTRACT: Product in the cart
use Moo;
use Business::CPI::Types qw/stringified_money/;

our $VERSION = '0.908'; # VERSION

has id => (
    coerce => sub { '' . $_[0] },
    is => 'ro',
    required => 1,
);

has price => (
    coerce => \&stringified_money,
    is => 'ro',
    required => 1,
);

has weight => (
    coerce => sub { 0 + $_[0] },
    is => 'ro',
);

has shipping => (
    coerce => \&stringified_money,
    is => 'ro',
);

has shipping_additional => (
    coerce => \&stringified_money,
    is => 'ro',
);

has description => (
    coerce => sub { '' . $_[0] },
    is => 'ro',
);

has quantity => (
    coerce => sub { int $_[0] },
    is => 'ro',
    default => sub { 1 },
);

1;

__END__

=pod

=encoding utf-8

=head1 NAME

Business::CPI::Item - Product in the cart

=head1 VERSION

version 0.908

=head1 DESCRIPTION

This class holds information about the products in a shopping cart.

=head1 ATTRIBUTES

=head2 id

B<MANDATORY> - Unique identifier for this product in your application.

=head2 description

A longer description of the product, or just the name, if the gateway doesn't
differentiate between name and description.

=head2 price

B<MANDATORY> - The price (in the chosen currency; see
L<Business::CPI::Gateway::Base/currency>) of one item. This will be multiplied
by the quantity.

=head2 quantity

How many of this product is being bought? Defaults to 1.

=head2 shipping

The shipping cost (in the chosen currency, same as in the price above) for this
particular item.

=head2 shipping_additional

The cost of each additional quantity of this item. For example, if the quantity
is 5, the L</shipping> attribute is set to 1.50, and this attribute is set to
0.50, then the total shipping cost will be 1*1.50 + 4*0.50 = 3.50. Note that
not all gateways implement this. In PayPal, for instance, it's called
shipping2.

=head2 weight

The weight of this item. If you define the L</shipping>, this will probably be
ignored by the gateway.

=head1 AUTHOR

André Walker <andre@andrewalker.net>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by André Walker.

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