import { APIAbstract, Map } from "@selldone/core-js";
import { XapiExchangeRate } from "./exchange-rates/XapiExchangeRate";
import { ExchangeRate } from "@selldone/core-js";
import { Shop } from "@selldone/core-js/models/shop/shop.model";
import type { Basket } from "@selldone/core-js/models/shop/order/basket/basket.model";
import { XapiLanguage } from "./language/XapiLanguage";
import { Popup } from "@selldone/core-js/models/shop/popup/popup.model";
import type { GatewayQue } from "@selldone/core-js/models/shop/payment/gateway-que.model";
import { Club } from "@selldone/core-js/models/shop/club/club.model";
import { Transportation } from "@selldone/core-js/models/shop/transportation/transportation.model";
import { Gateway } from "@selldone/core-js/models/shop/gateway/gateway.model";
import { ShopMenu } from "@selldone/core-js/models/shop/design/menu.model";
import { ProductBadge } from "@selldone/core-js/models/shop/product/badge.model";
/**
 * The `XapiShop` class provides an interface to interact with the shop-related
 * services on the backend, particularly around retrieving shop information.
 * It extends the base `APIAbstract` class.
 *
 * @extends APIAbstract
 */
export declare class XapiShop extends APIAbstract {
    /** Name of the shop for which the API operations will be performed. */
    shop_name: string;
    /**
     * API abstraction for exchange rate related operations.
     */
    exchange: XapiExchangeRate;
    /**
     * API abstraction for language related operations.
     */
    language: XapiLanguage;
    /**
     * Creates an instance of the `XapiShop`.
     *
     * @param shop_name - Name of the shop.
     */
    constructor(shop_name: string);
    /**
     * Fetches information about a shop.
     *
     * @returns Promise that resolves with shop information.
     */
    fetchShop(): Promise<XapiShop.IGetShopInfoResponse>;
}
export declare namespace XapiShop {
    /**
     * Represents the response returned when fetching shop information.
     */
    interface IGetShopInfoResponse {
        success: boolean;
        shop: Shop & {
            transportations: Transportation[];
            shop_exchange_rates: ExchangeRate[];
            gateways: Gateway[];
            menus: ShopMenu[];
            product_badges: ProductBadge[];
            /**
             * The currently active popup intended for the customer's display.
             * It's determined by the [S-Pops] header sent by the client (webapp).
             * [S-Pops] follows a JSON structure: {key(popup_id):Date, last:Current Date}.
             * The backend also appends this popup's ID with the current date to the `seen_pops` in the response.
             */
            popup?: Partial<Popup>;
            /**
             * 🥶 Guest code (use for guest basket)
             */
            guest_code?: string | null;
        };
        baskets?: Basket[];
        /**
         * Pending payments for the current customer.
         */
        pending_transactions?: GatewayQue[] | null;
        /**
         * Current customer club.
         */
        club: Club | null;
        /**
         * Represents the state of an order.
         */
        orders_state: OrdersState[];
        /**
         * Represents a location with longitude and latitude.
         */
        initial_location: Map.ILocation;
        /**
         * List of viewed popups. Their stringified values should be included in the [S-Pops] header of requests.
         */
        seen_pops?: ISeenPopup;
    }
    interface OrdersState {
        count: number;
        delivery_state: string;
        type: string;
    }
    interface ISeenPopup {
        last: string;
        [key: number]: string;
    }
}
