import { z } from 'zod';

interface WidgetLocation {
    state?: any;
    key?: string;
    pathname: string;
    hash: string;
    search: string;
}
interface WidgetBlocker {
    state: 'blocked' | 'unblocked' | 'proceeding';
    reset?: () => void;
    proceed?: () => void;
    location?: WidgetLocation;
}
declare enum WidgetAction {
    Pop = "POP",
    Push = "PUSH",
    Replace = "REPLACE"
}
declare type WidgetBlockerFunction = (args: {
    currentLocation: WidgetLocation;
    nextLocation: WidgetLocation;
    historyAction: WidgetAction;
}) => boolean;
interface WidgetHistory {
    location: WidgetLocation;
    push: (to: Partial<WidgetLocation> | string) => void;
    replace: (to: Partial<WidgetLocation> | string) => void;
    block?: (shouldBlock: boolean | WidgetBlockerFunction) => WidgetBlocker;
}

declare const SimplifiedWidgetRoutes: z.ZodObject<{
    /** The path to news page. */
    news: z.ZodDefault<z.ZodString>;
    /** The path to the store page. */
    store: z.ZodDefault<z.ZodString>;
    /** The path to the account page. */
    account: z.ZodDefault<z.ZodString>;
    /** The path to the order page. */
    orders: z.ZodDefault<z.ZodString>;
    /** The path to the error pages. */
    error: z.ZodDefault<z.ZodString>;
    /** The path to the twitch pages. */
    twitchDrops: z.ZodDefault<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    error: string;
    news: string;
    store: string;
    account: string;
    orders: string;
    twitchDrops: string;
}, {
    error?: string | undefined;
    news?: string | undefined;
    store?: string | undefined;
    account?: string | undefined;
    orders?: string | undefined;
    twitchDrops?: string | undefined;
}>;
declare type SimplifiedWidgetRoutes = z.infer<typeof SimplifiedWidgetRoutes>;
declare type RouteObject<T = any, QueryType = any> = {
    link: string;
    makePath: (obj: {
        params?: Record<keyof T, T[keyof T] | number>;
        state?: any;
        query?: Record<keyof QueryType, QueryType[keyof QueryType] | number>;
    }) => WidgetHistory['location'] | string;
};
interface AllWidgetRoutesWithPathMaker {
    home: RouteObject;
    news: RouteObject;
    linkAccount: RouteObject;
    linkAccountOneTimeCode: RouteObject;
    verifyUser: RouteObject;
    accountDeletionSuccess: RouteObject;
    paymentSuccessCallback: RouteObject;
    game: {
        index: RouteObject;
        detail: RouteObject<{
            gameId: string;
        }>;
    };
    support: {
        index: RouteObject;
        topic: {
            index: RouteObject;
        };
        article: {
            index: RouteObject;
        };
        manage: {
            article: {
                create: RouteObject;
                edit: RouteObject<{
                    slug: string;
                }>;
                index: RouteObject;
            };
            topic: {
                create: RouteObject;
                edit: RouteObject;
                index: RouteObject;
            };
        };
    };
    store: {
        index: RouteObject;
        apps: {
            index: RouteObject;
            detail: RouteObject<{
                itemId: string;
            }>;
        };
        dlcs: {
            index: RouteObject;
            detail: RouteObject<{
                itemId: string;
            }>;
        };
        bundles: {
            index: RouteObject;
            detail: RouteObject<{
                itemId: string;
            }>;
        };
        ingameitems: {
            index: RouteObject;
            detail: RouteObject<{
                itemId: string;
            }>;
        };
        codes: {
            index: RouteObject;
            detail: RouteObject;
        };
        optionboxes: {
            index: RouteObject;
            detail: RouteObject<{
                itemId: string;
            }>;
        };
    };
    orders: {
        detail: RouteObject<{
            orderNo: string;
        }>;
    };
    account: {
        index: RouteObject;
        overview: RouteObject;
        profile: RouteObject;
        accountHistory: {
            index: RouteObject;
            displayNameHistory: RouteObject;
            passwordHistory: RouteObject;
            emailHistory: RouteObject;
        };
        paymentMethods: RouteObject;
        changeEmail: RouteObject;
        changePassword: RouteObject;
        linkedAccounts: RouteObject;
        purchasedItems: {
            index: RouteObject;
            games: RouteObject;
            keys: RouteObject;
            optionboxes: RouteObject<any, {
                page: number;
            }>;
        };
        orderHistory: {
            index: RouteObject<any, {
                page: number;
            }>;
            detail: RouteObject<{
                orderNo: string;
            }>;
        };
        redeemCode: RouteObject;
        notificationPreferences: RouteObject;
        legalAgreements: RouteObject;
        personalData: RouteObject;
        accountDeletion: RouteObject;
    };
    twitchDrops: {
        index: RouteObject;
        claim: RouteObject;
    };
    error: {
        index: RouteObject;
        err400: RouteObject;
        err401: RouteObject;
        err404: RouteObject;
        err500: RouteObject;
        network: RouteObject;
        sessionExpired: RouteObject;
        alreadyAuthenticated: RouteObject;
    };
}
declare class RouteUtils {
    static createWidgetRoutes: (routes: Partial<SimplifiedWidgetRoutes>) => AllWidgetRoutesWithPathMaker;
}

export { AllWidgetRoutesWithPathMaker as A, RouteUtils as R, SimplifiedWidgetRoutes as S, WidgetHistory as W, WidgetBlockerFunction as a };
