import { Options } from 'fast-glob';

interface I18nConfig {
    locale: string;
    displayLanguage?: string;
    outputDir: string;
    tempDir?: string;
    include: string[];
    exclude?: string[];
    keyGeneration?: {
        maxChineseLength?: number;
        hashLength?: number;
        maxRetryCount?: number;
        reuseExistingKey?: boolean;
        duplicateKeySuffix?: 'hash';
        keyPrefix?: string;
        separator?: string;
        pinyinOptions?: {
            toneType?: 'none' | 'symbol' | 'num';
            type?: 'string' | 'array';
        };
    };
    output?: {
        prettyJson?: boolean;
        localeFileName?: string;
    };
    logging?: {
        enabled?: boolean;
        level?: 'minimal' | 'normal' | 'verbose';
    };
    replacement?: {
        functionName?: string;
        quoteType?: 'single' | 'double';
        useOriginalTextAsKey?: boolean;
        templateString?: {
            enabled?: boolean;
            preserveExpressions?: boolean;
            splitStrategy?: 'smart' | 'aggressive' | 'conservative';
        };
        autoImport?: {
            enabled?: boolean;
            insertPosition?: 'top' | 'afterImports';
            imports?: {
                [filePattern: string]: {
                    importStatement: string;
                };
            };
        };
    };
    translation?: {
        enabled?: boolean;
        provider?: 'baidu' | 'custom';
        defaultSourceLang?: string;
        defaultTargetLang?: string;
        concurrency?: number;
        retryTimes?: number;
        retryDelay?: number;
        batchDelay?: number;
        baidu?: {
            appid?: string;
            key?: string;
        };
        custom?: {
            endpoint?: string;
            apiKey?: string;
        };
    };
    [key: string]: unknown;
}

declare class ConfigManagerClass {
    private config;
    init(config: I18nConfig): void;
    get(): I18nConfig;
    reset(): void;
    isInitialized(): boolean;
}
declare const ConfigManager: ConfigManagerClass;

/**
 * 配置一致性检查工具
 * 用于验证所有配置项是否正确使用，没有硬编码值
 */
declare class ConfigValidator {
    /**
     * 检查配置的一致性和完整性
     */
    static validateConfigUsage(): {
        isValid: boolean;
        errors: string[];
        warnings: string[];
    };
    /**
     * 检查是否存在配置与代码不一致的问题
     */
    static checkConfigConsistency(): void;
}

declare function loadConfig(customConfigPath?: string): I18nConfig;

declare class Logger {
    private static temporaryLevel;
    private static getLogLevel;
    /**
     * 临时设置日志级别（用于进度显示期间）
     */
    static setTemporaryLevel(level: string | null): void;
    private static shouldLog;
    static success(message: string, level?: 'minimal' | 'normal' | 'verbose'): void;
    static info(message: string, level?: 'minimal' | 'normal' | 'verbose'): void;
    static warn(message: string, level?: 'minimal' | 'normal' | 'verbose'): void;
    static error(message: string, level?: 'minimal' | 'normal' | 'verbose'): void;
    static verbose(message: string): void;
}

/**
 * 读取文件内容
 */
declare function readFile(filePath: string, encoding?: BufferEncoding): Promise<string>;
/**
 * 写入文件内容
 */
declare function writeFile(filePath: string, data: string | Buffer): Promise<void>;
/**
 * 写入文件内容，支持 tempDir 配置
 * @param filePath 原始文件路径
 * @param data 文件内容
 * @param tempDir 临时目录，如果配置则写入到临时目录，否则写入原始位置
 */
declare function writeFileWithTempDir(filePath: string, data: string | Buffer, tempDir?: string): Promise<void>;
/**
 * 创建目录
 */
declare function ensureDir(dirPath: string): Promise<void>;
/**
 * 遍历目录下所有文件，支持glob模式和过滤参数
 */
declare function findFiles(pattern: string | string[], options?: Options): Promise<string[]>;
/**
 * 根据 include/exclude 参数筛选目标文件，所有路径以 CLI 执行目录为根目录
 * @param include 需要包含的文件模式（glob数组或字符串）
 * @param exclude 需要排除的文件模式（glob数组或字符串）
 */
declare function findTargetFiles(include: string[], exclude?: string[]): Promise<string[]>;
/**
 * 检查文件是否存在
 * @param filePath 文件路径
 */
declare function fileExists(filePath: string): boolean;
/**
 * 同步读取 JSON 文件内容
 * @param filePath JSON 文件路径
 */
declare function readJsonSync(filePath: string): unknown;
/**
 * 异步读取 JSON 文件内容
 * @param filePath JSON 文件路径
 * @param defaultValue 文件不存在时的默认值
 */
declare function readJson<T = unknown>(filePath: string, defaultValue?: T): Promise<T>;
/**
 * 异步写入 JSON 文件内容
 * @param filePath JSON 文件路径
 * @param data 要写入的数据
 * @param pretty 是否格式化输出，默认为 true
 */
declare function writeJson(filePath: string, data: unknown, pretty?: boolean): Promise<void>;

interface CLIWrapperOptions<T> {
    configRequired?: boolean;
    validator?: (config: I18nConfig) => void;
    preProcess?: (options: T) => T;
}
/**
 * CLI统一包裹函数
 * 统一处理配置加载、验证、错误处理等逻辑
 */
declare function withCLI<T extends Record<string, any>>(handler: (options: T, config: I18nConfig) => Promise<void>, wrapperOptions?: CLIWrapperOptions<T>): (options: T) => Promise<void>;

export { ConfigManager, ConfigValidator, type I18nConfig, Logger, ensureDir, fileExists, findFiles, findTargetFiles, loadConfig, readFile, readJson, readJsonSync, withCLI, writeFile, writeFileWithTempDir, writeJson };
