import { Logger } from 'electron-log';
import { D as DownloadOptions, M as MediaType, a as MediaAccessStatus, A as Appearance, S as SystemInfo } from '../types-GVSlQham.js';
import { BrowserWindow } from 'electron';

type EventType = string | symbol;
type Handler<T = unknown> = (event: T) => void;
type WildcardHandler<T = Record<string, unknown>> = (type: keyof T, event: T[keyof T]) => void;
type GenericEventHandler = Handler<any> | WildcardHandler<any>;
declare class NeosEmitter<Events extends Record<EventType, unknown>> {
    private events;
    constructor();
    /**
     * 订阅/监听事件
     *
     * @param type
     * @param handler
     */
    on<Key extends keyof Events>(type: Key, handler: GenericEventHandler): any;
    /**
     * 监听一次事件
     *
     * @param type
     * @param handler
     */
    once<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): any;
    /**
     * 发布事件
     *
     * @param type
     * @param data
     */
    emit<Key extends keyof Events>(type: Key, data?: Events[Key]): any;
    /**
     * 关闭事件监听
     *
     * @param type
     * @param handler
     */
    off<Key extends keyof Events>(type: Key, handler?: GenericEventHandler): any;
    /**
     * 销毁事件监听
     */
    destroy(): void;
}

declare class DownloadManager extends NeosEmitter<Record<string, unknown>> {
    private static instance;
    private constructor();
    static getInstance(): DownloadManager;
    private _emitEvents;
    /**
     * 开始下载
     * @param {string} url 下载地址
     * @param {DownloadOptions} options 下载选项
     * @returns {Promise<any>} 下载任务
     */
    start: (url: string, options: DownloadOptions) => Promise<any>;
    /**
     * 暂停下载
     * @param {string} fileUrl 下载地址
     * @returns {DownloadManager} 下载管理器
     */
    pause: (fileUrl: string) => DownloadManager;
    /**
     * 取消下载
     * @param {string} fileUrl 下载地址
     * @returns {DownloadManager} 下载管理器
     */
    cancel: (fileUrl: string) => DownloadManager;
    /**
     * 恢复下载
     * @param {string} fileUrl 下载地址
     * @returns {DownloadManager} 下载管理器
     */
    resume: (fileUrl: string) => DownloadManager;
    /**
     * 移除所有监听
     * @returns {DownloadManager} 下载管理器
     */
    destroy: () => void;
}

declare class FileManager {
    private static instance;
    private constructor();
    static getInstance(): FileManager;
    /**
     * 打开文件或文件夹
     * @param {string} path - 文件或文件夹路径
     */
    openPath: (path: string) => any;
    /**
     * 打开文件或文件夹(异步)
     * @param {string} path - 文件或文件夹路径
     */
    openPathAsync: (path: string) => Promise<any>;
    /**
     * 路径是否存在
     * @param {string} path - 文件或文件夹路径
     */
    pathExists: (path: string) => Promise<boolean>;
    /**
     * 清理目录
     * @param {string} dir - 目录路径
     */
    cleanupDirectory: (dir: string) => Promise<boolean>;
    /**
     * 删除用户数据
     * @param {string} name - 用户数据名称
     */
    deleteUserData: (name: string) => Promise<boolean>;
    /**
     * 保存文件
     * @param {string} filePath - 文件路径
     * @param {string} content - 文件内容
     */
    saveFile: (filePath: string, content: string) => Promise<void>;
    /**
     * 删除文件
     * @param {string} filePath - 文件路径
     */
    removeFile: (filePath: string) => Promise<void>;
}

declare class MediaManager {
    private static instance;
    private constructor();
    static getInstance(): MediaManager;
    /**
     * 获取媒体访问权限状态
     * @param {MediaType} mediaType - 媒体类型
     * @returns {Promise<MediaAccessStatus>} 媒体访问权限状态
     */
    getMediaAccessStatus: (mediaType: MediaType) => Promise<MediaAccessStatus>;
    /**
     * 请求媒体访问权限
     * @param {MediaType} mediaType - 媒体类型
     * @returns {Promise<boolean>} 是否请求成功
     */
    askForMediaAccess: (mediaType: MediaType) => Promise<boolean>;
}

declare class StorageManager {
    private static instance;
    private constructor();
    static getInstance(): StorageManager;
    /**
     * 清理系统缓存
     * @returns {Promise<void>} 清理系统缓存
     */
    clearCache: () => Promise<void>;
    /**
     * 清理系统存储
     * @param {any} options 清理系统存储选项
     */
    cleanStorage: (options?: any) => void;
}

declare class SystemManager {
    private static instance;
    private constructor();
    static getInstance(): SystemManager;
    /**
     * 获取系统主题
     * @returns {Promise<Appearance>} 系统主题
     */
    getSystemTheme: () => Promise<Appearance>;
    /**
     * 获取系统信息
     * @returns {Promise<SystemInfo>} 系统信息
     */
    getSystemInfo: () => Promise<SystemInfo>;
    /**
     * 打开URL
     * @param {string} url - URL
     */
    openURL: (url: string) => void;
}

declare class UpdaterManager extends NeosEmitter<Record<string, unknown>> {
    private static instance;
    private constructor();
    /**
     * 获取实例
     * @returns {UpdaterManager}
     */
    static getInstance(): UpdaterManager;
    /**
     * 自动更新
     * @returns {Promise<void>}
     */
    autoCheckForUpdates: (url: string) => Promise<void>;
    /**
     * 检查更新
     * @param {string} url 更新源
     * @returns {Promise<void>}
     */
    checkForUpdates: (url: string) => Promise<void>;
    /**
     * 下载更新
     * @returns {Promise<void>}
     */
    downloadUpdate: () => Promise<void>;
    /**
     * 安装更新
     * @returns {Promise<void>}
     */
    installUpdate: () => Promise<void>;
    /**
     * 销毁
     */
    destroy: () => void;
}

declare class WindowManager {
    private static instance;
    private constructor();
    static getInstance(): WindowManager;
    /**
     * 设置窗口大小
     * @param {number} width - 宽度
     * @param {number} height - 高度
     */
    setSize: (width: number, height: number) => void;
    /**
     * 设置窗口可操作
     * @param {string} type - 类型
     * @param {boolean} flag - 标志
     * @param {BrowserWindow} win - 窗口
     */
    setAble: (type: string, flag?: boolean, win?: BrowserWindow) => boolean;
    /**
     * 设置窗口居中
     */
    center: () => void;
    /**
     * 设置窗口最大化
     */
    maximize: () => void;
    /**
     * 设置窗口最小化
     */
    minimize: () => void;
    /**
     * 设置窗口关闭
     */
    closeWindow: () => void;
    /**
     * 设置窗口全屏
     */
    fullscreen: () => void;
    /**
     * 设置窗口退出全屏
     */
    exitFullscreen: () => void;
}

declare class RendererManager {
    version: string;
    private static instance;
    logger: Logger;
    downloadManager: DownloadManager;
    storageManager: StorageManager;
    windowManager: WindowManager;
    systemManager: SystemManager;
    mediaManager: MediaManager;
    fileManager: FileManager;
    updaterManager: UpdaterManager;
    emitter: NeosEmitter<Record<EventType, unknown>>;
    private constructor();
    static getInstance(): RendererManager;
}
declare const rendererManager: RendererManager;

export { rendererManager as default };
