import { Resource } from "../../common";
import { Ethnicity, Gender } from "../../profiles";
import { Package, SavedStoreLineItem, StoreLineItem } from "../order";
import { APILabShopOrderRequest, APILabShopOrderResponse, HomeKitOrderSupplierDataResponse, LabShopOrderSupplierDataResponse, SavedHomeKitOrderSupplierData, SavedLabShopOrderSupplierData, SavedStoreLabShopOrder, StoreLabShopOrder } from "./interfaces";
export declare class LabShopOrder extends Resource {
    /**
     * First name of the person placing the order.
     */
    firstName: string;
    /**
     * Last name of the person placing the order.
     *
     */
    lastName: string;
    /**
     * Email of the person placing the order.
     */
    email: string;
    /**
     * Phone number of the person placing the order.
     */
    phoneNumber: string;
    /**
     * Gender of the person placing the order.
     */
    gender: Gender;
    /**
     * Birth date of the person placing the order.
     */
    birthDate: string;
    /**
     * Ethnicity of the person placing the order.
     */
    ethnicity: Ethnicity;
    /**
     * The user the order belongs to.
     */
    userId?: string;
    /**
     * The date and time the order was placed.
     */
    createdAt?: string;
    /**
     * Shipping address line 1.
     */
    shipToAddress: string;
    /**
     * Shipping address line 2.
     */
    shipToAddress1?: string;
    /**
     * Shipping address city.
     */
    shipToCity: string;
    /**
     * The shipping address province or state.
     */
    shipToState: string;
    /**
     * Shipping address postal code.
     */
    shipToPostalCode: string;
    /**
     * Shipping address country.
     */
    shipToCountry: string;
    /**
     * Profile attached to the order.
     */
    profile?: string | null;
    /**
     * Has there been an error in the LabTestingAPI communication.
     */
    apiError?: boolean;
    /**
     * Supplier order data for tests that are done in a lab.
     */
    labOrder?: SavedLabShopOrderSupplierData | LabShopOrderSupplierDataResponse;
    /**
     * Supplier order data for tests that are done at home.
     */
    homeKitOrder?: SavedHomeKitOrderSupplierData | HomeKitOrderSupplierDataResponse;
    /**
     * The order's items.
     */
    lineItems: Array<StoreLineItem> | Array<SavedStoreLineItem>;
    /**
     * The order's packages.
     */
    packages?: Array<Package>;
    constructor(lineItems: Array<StoreLineItem> | Array<SavedStoreLineItem>, firstName: string, lastName: string, email: string, phoneNumber: string, gender: Gender, ethnicity: Ethnicity, birthDate: string, shipToAddress: string, shipToCity: string, shipToState: string, shipToPostalCode: string, shipToCountry: string, shipToAddress1?: string, profile?: string | null, apiError?: boolean, packages?: Array<Package>, userId?: string, createdAt?: string, labOrder?: SavedLabShopOrderSupplierData | LabShopOrderSupplierDataResponse, homeKitOrder?: SavedHomeKitOrderSupplierData | HomeKitOrderSupplierDataResponse);
    /**
     * The name of the lab-shop-order resource on the API server.
     */
    static get resourceName(): string;
    /**
     * The name of the service containing the order resource.
     */
    static get serviceName(): string;
    /**
     * Convert the lab-shop-order into a JSON serializable object for the API server.
     */
    serializeAPI(): APILabShopOrderRequest;
    /**
     * Serialize the lab order supplier data from the API server for Redux store.
     *
     * @param labOrder The lab order supplier data from the API server.
     */
    protected serializeReduxLabOrderSupplierDetails(labOrder?: LabShopOrderSupplierDataResponse | SavedLabShopOrderSupplierData): SavedLabShopOrderSupplierData | undefined;
    /**
     * Serialize the home kit data from the API server for Redux store.
     *
     * @param homeKitOrder The home kit order supplier data from the API server.
     */
    protected serializeReduxHomeKitOrderSupplierDetails(homeKitOrder?: HomeKitOrderSupplierDataResponse | SavedHomeKitOrderSupplierData): SavedHomeKitOrderSupplierData | undefined;
    /**
     * Deserialize the data from the API server.
     *
     * @param data The lab-shop-order data from the API server.
     */
    deserializeAPI(data: APILabShopOrderResponse): void;
    /**
     * Create a order from the API server data.
     *
     * @param data Data from the api server.
     *
     * @returns The lab-shop-order object.
     */
    static apiFactory(data: APILabShopOrderResponse): LabShopOrder;
    /**
     * Create a order from the Redux store data.
     *
     * @param data Data from the api server.
     *
     * @returns The lab-shop-order object.
     */
    static reduxFactory(data: StoreLabShopOrder): LabShopOrder;
    /**
     * Serialize the order into a format for storing in the Redux store.
     */
    serializeRedux(): SavedStoreLabShopOrder;
    /**
     * Check that the line items are consistent with the store line items.
     */
    private checkSavedStoreLineItem;
}
