import { Plugin } from 'vite';

interface AgentConfig {
    projectId: string;
    wsUrl: string;
    debug?: boolean;
    toolbar?: {
        enabled?: boolean;
        position?: "top" | "bottom";
        autoOpen?: boolean;
    };
}
interface FileChange {
    projectId: string;
    filePath: string;
    content: string;
    hash: string;
    timestamp: number;
}
interface FileDelete {
    projectId: string;
    filePath: string;
    timestamp: number;
}
declare class PhionAgent {
    private socket;
    private watcher;
    private httpServer;
    private isConnected;
    private isGitRepo;
    private config;
    constructor(config: AgentConfig);
    start(): Promise<void>;
    private startLocalServer;
    private openUrlInSystem;
    private checkGitRepository;
    private initializeGitRepository;
    private connectWebSocket;
    private setupEventHandlers;
    private discardLocalChanges;
    private gitPullWithToken;
    private updateLocalFiles;
    private startFileWatcher;
    private handleFileChange;
    private handleFileDelete;
    private openPreviewIfEnabled;
    stop(): void;
}

interface VersionInfo {
    current: string;
    latest?: string;
    hasUpdate: boolean;
}
/**
 * Получает текущую версию из package.json
 */
declare function getCurrentVersion(): string;
/**
 * Выполняет полную проверку версии и возвращает информацию
 */
declare function checkForUpdates(wsUrl: string): Promise<VersionInfo>;

interface VSCodeConfig {
    autoOpen: boolean;
    port: number;
    url?: string;
}
/**
 * Detects if VS Code or Cursor is running
 */
declare function detectVSCode(): boolean;
/**
 * Main function for opening preview
 */
declare function openPreview(config: VSCodeConfig, debug?: boolean): Promise<void>;

interface PhionConfig {
    projectId: string;
    wsUrl?: string;
    debug?: boolean;
    toolbar?: {
        enabled?: boolean;
        position?: "top" | "bottom";
        autoOpen?: boolean;
        autoUpdate?: boolean;
        updateChannel?: "stable" | "beta" | "dev";
    };
    autoSync?: boolean;
    autoStart?: "first" | "always" | "never";
}
interface PhionPluginOptions {
    configPath?: string;
    websocketUrl?: string;
    toolbarUrl?: string;
    debug?: boolean;
    enabled?: boolean;
    autoUpdateToolbar?: boolean;
    autoUpdate?: boolean;
    updateEndpoint?: string;
}
interface ToolbarVersion {
    version: string;
    url: string;
    checksum?: string;
}
interface UpdateCheckResponse {
    hasUpdate: boolean;
    latestVersion?: ToolbarVersion;
    currentVersion: string;
}

declare function phionPlugin(options?: PhionPluginOptions): Plugin;

export { type AgentConfig, type FileChange, type FileDelete, PhionAgent, type PhionConfig, type PhionPluginOptions, type ToolbarVersion, type UpdateCheckResponse, type VSCodeConfig, checkForUpdates, detectVSCode, getCurrentVersion, openPreview, phionPlugin as plugin };
