import { UserConfig, Plugin } from 'vite';

interface MultiPageOptions {
    entry?: string;
    exclude?: string[];
    template?: string;
    placeholder?: string;
    debug?: boolean;
    merge?: 'all' | 'page';
    strategies?: Record<string, ConfigStrategy>;
    pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
    pageEnvs?: PageEnvFunction;
    __forceBuildStrategy?: string;
}
type Options = MultiPageOptions;
interface BuildConfigOptions {
    entry: string;
    exclude: string[];
    template: string;
    placeholder: string;
    merge?: 'all' | 'page';
    strategies?: Record<string, ConfigStrategy>;
    pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
    pageEnvs?: PageEnvFunction;
    forceBuildStrategy?: string;
    forceBuildPage?: string;
}
interface ConfigStrategy extends Omit<UserConfig, 'plugins'> {
}
interface PageConfig {
    strategy?: string;
    define?: Record<string, any>;
    template?: string;
    viteConfig?: UserConfig;
    match?: string;
}
interface PageContext {
    pageName: string;
    filePath: string;
    relativePath: string;
    fullPath?: string;
    strategy?: string;
    isMatched?: boolean;
}
type PageConfigFunction = (context: PageContext) => PageConfig | null;
type PageEnvFunction = (context: PageContext) => Record<string, string> | null;
interface PluginContext {
    mode: string;
    command: 'build' | 'serve';
    isCLI: boolean;
}
type ConfigFunction = (context: PluginContext) => MultiPageOptions;
type ConfigTransformFunction = (config: MultiPageOptions, context: PluginContext) => MultiPageOptions;
declare function defineConfig(config: MultiPageOptions | ConfigFunction): ConfigFunction;
declare function defineConfigTransform(transform: ConfigTransformFunction): ConfigTransformFunction;

/**
 * 构建时配置生成器
 * 根据策略和页面配置生成多页面构建配置
 */
declare function generateBuildConfig(options: BuildConfigOptions): Record<string, UserConfig>;
/**
 * 获取Vite配置的输出目录
 * 需要传入已解析的Vite配置或命令行参数
 */
declare function getViteOutputDirectory(viteBuildArgs?: string[]): string;
/**
 * 清理Vite配置的输出目录
 */
declare function cleanViteOutputDirectory(viteBuildArgs?: string[]): void;
declare function getAvailableStrategies(options: BuildConfigOptions): string[];

/**
 * 合并用户配置和默认配置
 */
declare function mergeWithDefaults(userConfig: MultiPageOptions | null | undefined): MultiPageOptions;

declare function viteMultiPage(transform?: ConfigTransformFunction): Plugin;
/**
 * CLI工具专用的资源重组函数
 */
declare function reorganizeAssetsInCLI(distDir: string, mode: 'strategy' | 'page', options: Options, log: (...args: any[]) => void): void;

export { type ConfigFunction, type ConfigTransformFunction, type Options, type PageConfig, type PageContext, type PluginContext, cleanViteOutputDirectory, viteMultiPage as default, defineConfig, defineConfigTransform, generateBuildConfig, getAvailableStrategies, getViteOutputDirectory, mergeWithDefaults, reorganizeAssetsInCLI, viteMultiPage };
