import * as React from 'react';
import { CloudBundleConfig, CloudBundleConfigType } from './runtime.cloud.types';
import { RuntimeRouter } from './runtime-core/runtime.router/runtime.router';
import { ReactComponentProps } from './runtime-core/runtime.utils.types';
import { MicroserviceDefinition } from './runtime-web/types/microservice.types';
/**
 * Represents the SEO metadata structure used throughout the application.
 * This is a partial type allowing optional fields for flexible configuration.
 */
export type SeoMetaData = {
    route?: string;
    title?: string;
    description?: string;
    keywords?: string[];
    ogTitle?: string;
    ogDescription?: string;
    ogImage?: string;
    twitterTitle?: string;
    twitterDescription?: string;
    twitterImage?: string;
    canonicalUrl?: string;
    robots?: string;
};
/**
 * SeoMiddleware is a middleware function type designed to process SEO-related
 * metadata by taking in various options and returning an object containing SEO
 * metadata details.
 *
 * It is commonly used in applications for enhancing web pages with SEO
 * attributes such as title, description, canonical URL, and meta tags.
 *
 * @typedef {function} SeoMiddlewareFn
 * @param {...any} options - A list of options or parameters that the middleware
 * function can interpret to generate SEO metadata.
 * @returns {SeoMetaData} An object containing the processed SEO metadata.
 */
export type SeoMiddlewareFn = (...options: any) => Promise<any[]>;
/**
 * Represents the configuration options for the Runtime application.
 * This type defines the properties and expected types for initializing
 * and managing the application, including UI structure, routing, SEO,
 * and cloud bundle settings.
 */
export type RuntimeThreads = {
    /**
     * Represents a React component or element.
     * The `app` variable is intended to store a ReactElement that defines the structure
     * and behavior of a portion or the entire user interface of the application.
     *
     * This element is used as a React application and can be rendered
     * into the DOM or other render targets supported by React.
     *
     * Type: React.ReactElement
     */
    app: React.FC<ReactComponentProps>;
    /**
     * Configuration object that defines the settings and parameters for a specific cloud bundle type.
     * This variable uses the `CloudBundleConfig` interface and associates it with
     * a `CloudBundleConfigType` to specify the specific configuration details.
     *
     * @type {CloudBundleConfig[CloudBundleConfigType]}
     *
     * @todo: add config schema validation
     */
    config: CloudBundleConfig[CloudBundleConfigType];
    /**
     * Represents a collection of route objects used for defining application routing.
     * Each RouteObject in the array specifies a single route configuration, including
     * path, component, child routes, and additional settings.
     *
     * The `router` variable allows for declarative routing and is typically used
     * in conjunction with a routing library to manage navigation and rendering components
     * based on the URL path.
     *
     * Type: `Router[]`
     */
    router: RuntimeRouter;
    /**
     * An optional middleware function designed to handle SEO (Search Engine Optimization) processing.
     * This middleware may be used to modify, analyze, or enhance server responses,
     * including setting metadata, titles, descriptions, or headers for better search engine visibility.
     *
     * @type {SeoMiddlewareFn | undefined}
     */
    seoMiddleware?: SeoMiddlewareFn;
    /**
     * Microservice registry with service definitions
     */
    register?: Record<string, MicroserviceDefinition>;
    /**
     * Optional default SEO metadata to be used as the base-level defaults throughout the application.
     * These defaults are used by the SEO service when:
     * - No route-specific SEO metadata exists in DynamoDB
     * - No default SEO metadata exists in DynamoDB (route `[seo-defaults]`)
     *
     * If not provided, the framework will fall back to hardcoded defaults.
     *
     * Priority order:
     * 1. Route-specific metadata from DynamoDB (highest priority)
     * 2. Default metadata from DynamoDB (`[seo-defaults]` route)
     * 3. Initialization defaults (this property)
     * 4. Hardcoded framework defaults (lowest priority)
     *
     * @type {Partial<SeoMetaData> | undefined}
     *
     * @example
     * runtime({
     *   app: App,
     *   router: myRouter,
     *   config: myConfig,
     *   defaultSeoMeta: {
     *     title: 'My Application',
     *     description: 'Welcome to my application',
     *     keywords: ['app', 'react', 'serverless rendering'],
     *     ogImage: '/images/og-default.png',
     *     twitterCard: 'summary_large_image'
     *   }
     * });
     */
    defaultSeoMeta?: Partial<SeoMetaData>;
};
export declare enum EnginesBrowserFramework {
    React = "react",
    Angular = "angular",
    Vue = "vue",
    Svelte = "svelte",
    SvelteKit = "sveltekit",
    Solid = "solid",
    Polymer = "polymer",
    Ember = "ember",
    Preact = "preact",
    Riot = "riot"
}
