import { OrderAttribute } from '../common/attributes';
import { IdParam, PagingQuery } from '../common/types';
import { Ticket } from '../event/types';
export type TicketFormatType = 'PDF' | 'SECURE' | 'PKPASS';
/**
 * Payload for order creation
 *
 * @param orderItem Array of `OrderItem`s
 * @param format Format of the tickets (PDF, SECURE or PKPASS)
 * @param holdToken Hold token for seat reservation generated on Seats.io (if seating chart is used)
 */
export interface OrderRequest {
    orderItem: OrderItemRequest[];
    format: TicketFormatType;
    holdToken?: string;
    orderContact?: OrderContactRequest;
}
/**
 * Single order item inside the order
 *
 * @param quantity Number of tickets inside the order item
 * @param ticketConfigId Id of the ticket configuration
 * @param timeslotId Id of the timeslot where the ticket is reserved
 * @param sectorId Id of the sector where the ticket is reserved
 * @param ticketDiscount Array of ticket discount IDs applied to the order item
 * @param selectedSeats Array of seat labels generated on Seats.io (if seating chart is used)
 */
export interface OrderItemRequest {
    quantity: number;
    ticketConfigId: number;
    timeslotId?: number;
    sectorId?: number;
    ticketDiscount?: number[];
    selectedSeats?: string[];
}
export interface OrderContactRequest {
    firstName: string;
    lastName: string;
    email: string;
    billingEmail: string;
    phone?: string;
    street1?: string;
    street2?: string;
    city?: string;
    zip?: string;
    state?: string;
    country?: string;
    vatNumber?: string;
    businessName?: string;
}
export interface OrderItem {
    id: number;
    price: number;
    ticket: Ticket[];
}
export interface Order {
    id: number;
    ownerId: string;
    ownerType: string;
    paymentId?: string;
    format: string;
    status?: OrderStatus;
    total?: number;
    refundedAmount?: number;
    paymentCreatedAt?: Date;
    createdAt: Date;
    currency?: string;
    holdToken?: string;
    orderItem?: OrderItem[];
    orderContact?: OrderContact;
}
export interface OrderContact extends OrderContactRequest {
    id: number;
}
export interface OrderGet extends IdParam {
    with?: OrderAttribute;
}
export declare enum OrderStatus {
    /**
     * Initial order state
     */
    Draft = "draft",
    /**
     * The state of the payment after a payment is associated to it
     */
    PaymentProcessing = "payment_processing",
    /**
     * The state of the order after the payment wasn't made in the payment window
     * or if the payment has timed out
     * or if the payment has been manually canceled
     * This is an end state
     */
    Canceled = "payment_failed",
    /**
     * State after a successful payment confirmation
     */
    Paid = "paid",
    /**
     * State when some tickets were refunded, but not all
     * The only further state is `refunded`
     */
    PartiallyRefunded = "partially_refunded",
    /**
     * State of order after its payment is refunded
     * Should release the associated tickets
     * This is an end state
     */
    Refunded = "refunded"
}
export interface OrderListQuery extends PagingQuery {
    organizer_id?: string;
    include_not_owned?: boolean;
    id?: number;
    contact_email?: string;
    event_id?: number;
    sort_by?: string;
    with?: OrderAttribute;
}
export interface RefundOrderBody {
    ticketIds?: number[];
}
//# sourceMappingURL=types.d.ts.map