import { Price } from './Prices.js';
import { TaxRate } from './TaxRates.js';
import { Metadata } from '../shared.js';
export interface LineItem {
    /**
     * Unique identifier for the object.
     */
    id: string;
    /**
     * String representing the object's type. Objects of the same type share the same value.
     */
    object: 'item';
    adjustable_quantity: LineItem.AdjustableQuantity | null;
    /**
     * Total discount amount applied. If no discounts were applied, defaults to 0.
     */
    amount_discount: number;
    /**
     * Total before any discounts or taxes are applied.
     */
    amount_subtotal: number;
    /**
     * Total tax amount applied. If no tax was applied, defaults to 0.
     */
    amount_tax: number;
    /**
     * Total after discounts and taxes.
     */
    amount_total: number;
    /**
     * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
     */
    currency: string;
    /**
     * An arbitrary string attached to the object. Often useful for displaying to users. Defaults to product name.
     */
    description: string | null;
    /**
     * The discounts applied to the line item.
     */
    discounts?: Array<LineItem.Discount>;
    /**
     * Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
     */
    metadata: Metadata | null;
    /**
     * The price used to generate the line item.
     */
    price: Price | null;
    /**
     * The quantity of products being purchased.
     */
    quantity: number | null;
    /**
     * The taxes applied to the line item.
     */
    taxes?: Array<LineItem.Tax>;
}
export declare namespace LineItem {
    interface AdjustableQuantity {
        enabled: boolean;
        maximum: number | null;
        minimum: number | null;
    }
    interface Discount {
        /**
         * The amount discounted.
         */
        amount: number;
        /**
         * A discount represents the actual application of a [coupon](https://api.stripe.com#coupons) or [promotion code](https://api.stripe.com#promotion_codes).
         * It contains information about when the discount began, when it will end, and what it is applied to.
         *
         * Related guide: [Applying discounts to subscriptions](https://docs.stripe.com/billing/subscriptions/discounts)
         */
        discount: Discount;
    }
    interface Tax {
        /**
         * Amount of tax applied for this rate.
         */
        amount: number;
        /**
         * Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax.
         *
         * Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates)
         */
        rate: TaxRate;
        /**
         * The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported.
         */
        taxability_reason: Tax.TaxabilityReason | null;
        /**
         * The amount on which tax is calculated, in cents (or local equivalent).
         */
        taxable_amount: number | null;
    }
    namespace Tax {
        type TaxabilityReason = 'customer_exempt' | 'not_collecting' | 'not_subject_to_tax' | 'not_supported' | 'portion_product_exempt' | 'portion_reduced_rated' | 'portion_standard_rated' | 'product_exempt' | 'product_exempt_holiday' | 'proportionally_rated' | 'reduced_rated' | 'reverse_charge' | 'standard_rated' | 'taxable_basis_reduced' | 'zero_rated';
    }
}
