import { ApplicationMethodAllocationValues, ApplicationMethodTargetTypeValues, ApplicationMethodTypeValues, PromotionRuleOperatorValues, PromotionStatusValues, PromotionTypeValues } from "../../../promotion";
import { AdminCreateCampaign } from "../../campaign";
export interface AdminCreatePromotionRule {
    /**
     * The operator used to check whether the buy rule applies on a cart.
     * For example, `eq` means that the cart's value for the specified attribute
     * must match the specified value.
     */
    operator: PromotionRuleOperatorValues;
    /**
     * The description of the promotion rule.
     */
    description?: string | null;
    /**
     * The attribute to compare against when checking whether a promotion can be applied on a cart.
     *
     * @example
     * items.product_id
     */
    attribute: string;
    /**
     * The value to compare against when checking whether a promotion can be applied on a cart.
     *
     * @example
     * prod_123
     */
    values: string | string[];
}
export interface AdminUpdatePromotionRule {
    id: string;
    operator?: PromotionRuleOperatorValues;
    description?: string | null;
    attribute?: string;
    values: string | string[];
}
export interface AdminCreateApplicationMethod {
    /**
     * The description of the application method.
     */
    description?: string | null;
    /**
     * The value of the application method.
     */
    value: number;
    /**
     * The currency code of the application method.
     *
     * @example
     * usd
     */
    currency_code?: string | null;
    /**
     * The max quantity allowed in the cart for the associated promotion to be applied.
     */
    max_quantity?: number | null;
    /**
     * The type of the application method.
     */
    type: ApplicationMethodTypeValues;
    /**
     * The target type of the application method indicating whether the associated promotion is applied
     * to the cart's items, shipping methods, or the whole order.
     */
    target_type: ApplicationMethodTargetTypeValues;
    /**
     * The allocation value that indicates whether the associated promotion is applied on each
     * item in a cart or split between the items in the cart.
     */
    allocation?: ApplicationMethodAllocationValues;
    /**
     * The target rules of the application method.
     */
    target_rules?: AdminCreatePromotionRule[];
    /**
     * The buy rules of the application method.
     */
    buy_rules?: AdminCreatePromotionRule[];
    /**
     * The quantity of the application method.
     */
    apply_to_quantity?: number | null;
    /**
     * The minimum quantity required for a `buyget` promotion to be applied. For example,
     * if the promotion is a "Buy 2 shirts get 1 free", the value of this attribute is 2.
     */
    buy_rules_min_quantity?: number | null;
}
export interface AdminUpdateApplicationMethod {
    /**
     * The description of the application method.
     */
    description?: string | null;
    /**
     * The value of the application method.
     */
    value?: number;
    /**
     * The max quantity allowed in the cart for the associated promotion to be applied.
     */
    max_quantity?: number | null;
    /**
     * The currency code of the application method.
     *
     * @example
     * usd
     */
    currency_code?: string | null;
    /**
     * The type of the application method.
     */
    type?: ApplicationMethodTypeValues;
    /**
     * The target type of the application method indicating whether the associated promotion is applied
     * to the cart's items, shipping methods, or the whole order.
     */
    target_type?: ApplicationMethodTargetTypeValues;
    /**
     * The allocation value that indicates whether the associated promotion is applied on each
     * item in a cart or split between the items in the cart.
     */
    allocation?: ApplicationMethodAllocationValues;
    /**
     * The target rules of the application method.
     */
    target_rules?: AdminCreatePromotionRule[];
    /**
     * The buy rules of the application method.
     */
    buy_rules?: AdminCreatePromotionRule[];
    /**
     * The quantity of the application method.
     */
    apply_to_quantity?: number | null;
    /**
     * The minimum quantity required for a `buyget` promotion to be applied. For example,
     * if the promotion is a "Buy 2 shirts get 1 free", the value of this attribute is 2.
     */
    buy_rules_min_quantity?: number | null;
}
export interface AdminCreatePromotion {
    /**
     * The promotion's code.
     */
    code: string;
    /**
     * Whether the promotion is applied automatically
     * or requires the customer to manually apply it
     * by entering the code at checkout.
     */
    is_automatic?: boolean;
    /**
     * Whether the promotion is tax inclusive.
     */
    is_tax_inclusive?: boolean;
    /**
     * The type of promotion.
     */
    type: PromotionTypeValues;
    /**
     * The ID of the campaign that the promotion belongs to.
     */
    campaign_id?: string | null;
    /**
     * The campaign that the promotion belongs to.
     */
    campaign?: AdminCreateCampaign;
    /**
     * The application method of the promotion.
     */
    application_method: AdminCreateApplicationMethod;
    /**
     * The rules of the promotion.
     */
    rules?: AdminCreatePromotionRule[];
}
export interface AdminUpdatePromotion {
    /**
     * The promotion's code.
     */
    code?: string;
    /**
     * Whether the promotion is applied automatically
     * or requires the customer to manually apply it
     * by entering the code at checkout.
     */
    is_automatic?: boolean;
    /**
     * The type of promotion.
     */
    type?: PromotionTypeValues;
    /**
     * The status of the promotion.
     */
    status?: PromotionStatusValues;
    /**
     * The ID of the campaign that the promotion belongs to.
     */
    campaign_id?: string | null;
    /**
     * The campaign that the promotion belongs to.
     */
    campaign?: AdminCreateCampaign;
    /**
     * The application method of the promotion.
     */
    application_method?: AdminUpdateApplicationMethod;
    /**
     * The rules of the promotion.
     */
    rules?: AdminCreatePromotionRule[];
}
export interface BatchAddPromotionRulesReq {
    /**
     * The rules to add.
     */
    rules: AdminCreatePromotionRule[];
}
export interface BatchRemovePromotionRulesReq {
    /**
     * The IDs of the rules to remove.
     */
    rule_ids: string[];
}
export interface BatchUpdatePromotionRulesReq {
    /**
     * The rules to update.
     */
    rules: AdminUpdatePromotionRule[];
}
//# sourceMappingURL=payloads.d.ts.map