/**
 * Internal plugin state and context types
 */
import type { ResolvedConfig } from 'vite';
import type { PlaycademyMode, PlaycademyTimebackOptions } from './options';
/**
 * TimeBack roles that can be cycled through in dev mode
 */
export declare const TIMEBACK_ROLES: readonly ['student', 'parent', 'teacher', 'administrator'];
export type TimebackRoleOverride = (typeof TIMEBACK_ROLES)[number];
/**
 * Platform roles that can be cycled through in dev mode
 */
export declare const PLATFORM_ROLES: readonly ['player', 'developer', 'admin'];
export type PlatformRoleOverride = (typeof PLATFORM_ROLES)[number];
/**
 * Internal resolved plugin options
 */
export interface ResolvedPluginOptions {
    configPath?: string;
    mode: PlaycademyMode;
    autoZip: boolean;
    sandboxUrl: string;
    startSandbox: boolean;
    verbose: boolean;
    logLevel: 'debug' | 'info' | 'warn' | 'error';
    recreateDb: boolean;
    seed: boolean;
    memoryOnly: boolean;
    databasePath?: string;
    hideBadge: boolean;
    timeback?: PlaycademyTimebackOptions | false;
}
/**
 * Plugin context shared across hooks
 */
export interface PluginContext {
    options: ResolvedPluginOptions;
    viteConfig: ResolvedConfig | null;
    backendPort: number | null;
    sandboxPort: number | null;
    buildOutputs: PlaycademyOutputData;
}
/**
 * Build output data for logging and tracking
 */
export interface PlaycademyOutputData {
    manifestPath?: string;
    manifestSizeKb?: string;
    zipPath?: string;
    zipSizeKb?: string;
}
/**
 * TimeBack course configuration from playcademy.config
 */
export interface TimebackCourseConfig {
    subject: string;
    grade: number;
    courseId?: string;
    totalXp?: number | null;
    masterableUnits?: number | null;
}
/**
 * Combined TimeBack context for vite-plugin internal use.
 * Bundles base courses (from config) with user overrides (from plugin options).
 *
 * NOTE: This is different from SDK's TimebackInitContext which is the
 * payload sent to games. This is for plugin configuration bundling.
 */
export interface TimebackPluginContext {
    /** Base courses from playcademy.config.js */
    baseCourses: TimebackCourseConfig[];
    /** User overrides from vite.config.ts plugin options */
    overrides?: PlaycademyTimebackOptions;
}
/**
 * Project information extracted from package.json and directory structure
 */
export interface ProjectInfo {
    gameId?: string;
    slug: string;
    displayName: string;
    version: string;
    description?: string;
    timebackCourses?: TimebackCourseConfig[];
}
/**
 * Sandbox manager interface for controlling sandbox lifecycle
 */
export interface SandboxManager {
    baseUrl: string;
    port: number;
    project: ProjectInfo | null;
    gameId?: string;
    timebackMode?: 'mock' | 'remote' | 'local' | null;
    setRole?: (role: TimebackRoleOverride) => void;
    cleanup: () => void | Promise<void>;
}
/**
 * CLI server manager interface for controlling backend server lifecycle
 */
export interface CliServerManager {
    server: {
        dispose: () => Promise<void>;
    };
    port: number;
    stopHotReload: () => void;
    cleanup: () => void;
}
/**
 * Options for setting up the CLI dev server
 */
export interface CliDevServerOptions {
    port: number;
    viteConfig: ResolvedConfig;
    platformUrl?: string;
    configPath?: string;
    gameId?: string;
}
/**
 * Options for shell-backed modes (sandbox + backend + shell)
 */
export interface PlatformModeOptions {
    startSandbox: boolean;
    sandboxPort: number;
    verbose: boolean;
    logLevel: 'debug' | 'info' | 'warn' | 'error';
    sandboxUrl: string;
    recreateDb: boolean;
    seed: boolean;
    memoryOnly: boolean;
    databasePath?: string;
    hideBadge: boolean;
    backendPort: number;
    configPath?: string;
    timeback?: PlaycademyTimebackOptions | false;
}
/**
 * Options for standalone mode (backend only)
 */
export interface StandaloneModeOptions {
    backendPort: number;
    configPath?: string;
}
/**
 * Options for hotkeys and mode switching
 */
export interface HotkeyOptions {
    viteConfig: ResolvedConfig;
    platformModeOptions: PlatformModeOptions;
}
/**
 * Options for the startup banner
 */
export interface BannerOptions {
    /** Plugin version */
    version: string;
    /** Game/project name (shell-backed modes only) */
    gameName?: string;
    /** Sandbox server info */
    sandbox?: {
        port: number;
        enabled: true;
    } | {
        enabled: false;
    };
    /** Backend server info */
    backend?: {
        port: number;
        /** Vite port for proxied URL display */
        vitePort?: number;
    };
    /** Timeback info (shell-backed modes only) */
    timeback?: {
        courseCount: number;
        enrolledCount: number;
        mode: 'mock' | 'remote' | 'local';
    };
}
