import { Return } from "./return";
export declare enum OrderItemStatusType {
    PENDING = "PENDING",
    SHIPPED = "SHIPPED",
    CANCELED = "CANCELED",
    REFUNDED = "REFUNDED",
    RETURNED = "RETURNED",
    REIMBURSED = "REIMBURSED",
    CLAWBACK = "CLAWBACK"
}
export declare const getPreviousOrderItemStatuses: (status: OrderItemStatusType) => Array<OrderItemStatusType>;
export declare class OrderItemStatus {
    status: OrderItemStatusType;
    private date;
    constructor(status: OrderItemStatusType, date: Date);
    getDate: () => Date;
    setDate: (date: Date) => void;
    getStatus: () => OrderItemStatusType;
    setStatus: (status: OrderItemStatusType) => void;
}
export interface OrderBuyer {
    name?: string;
    email: string;
    phoneNumber?: string;
}
export interface OrderAddress {
    country?: string;
    region?: string;
    city?: string;
    address?: string;
}
export declare class OrderItem {
    id: string;
    orderId: string;
    providerId: string;
    sellerSku: string;
    private currentStatus;
    status: Array<OrderItemStatus>;
    attributes?: object;
    return?: Return;
    private updated;
    constructor(id: string, providerId: string);
    merge(existing: OrderItem): void;
    hasBeenUpdated(): boolean;
    setUpdated(): void;
    setCurrentStatus(status: OrderItemStatusType): void;
    getCurrentStatus(): OrderItemStatusType;
    addStatus(status: OrderItemStatus): void;
    isReturnable(): boolean;
    hasStatus(status: OrderItemStatusType): boolean;
    getStatus(status: OrderItemStatusType): OrderItemStatus | undefined;
}
export declare class Order {
    id: string;
    provider: string;
    providerId: string;
    purchaseDate: Date;
    lastUpdateDate: Date;
    marketplaceId: string;
    attributes?: object;
    shippingAddress?: OrderAddress;
    buyer?: OrderBuyer;
    orderItems: Array<OrderItem>;
    private updated;
    constructor(id: string, provider: string, providerId: string);
    merge(existing: Order): void;
    hasBeenUpdated(): boolean;
    setUpdated(): void;
    pushItems(...item: Array<OrderItem>): void;
}
