/**
 * Project Templates & Scaffolding
 *
 * Generate project structures from templates:
 * - Built-in templates for common project types
 * - Custom template support
 * - Variable substitution
 * - Post-generation hooks
 */
import { EventEmitter } from 'events';
export interface ProjectTemplate {
    name: string;
    description: string;
    category: TemplateCategory;
    version: string;
    author?: string;
    repository?: string;
    variables: TemplateVariable[];
    files: TemplateFile[];
    directories: string[];
    postGenerate?: PostGenerateHook[];
    dependencies?: Record<string, string>;
    devDependencies?: Record<string, string>;
}
export type TemplateCategory = 'web' | 'api' | 'cli' | 'library' | 'fullstack' | 'mobile' | 'desktop' | 'microservice' | 'custom';
export interface TemplateVariable {
    name: string;
    description: string;
    type: 'string' | 'boolean' | 'choice';
    default?: string | boolean;
    choices?: string[];
    required?: boolean;
    validate?: string;
}
export interface TemplateFile {
    path: string;
    content: string;
    condition?: string;
    executable?: boolean;
}
export interface PostGenerateHook {
    name: string;
    command: string;
    args: string[];
    condition?: string;
    optional?: boolean;
}
export interface GenerateOptions {
    template: string;
    projectName: string;
    outputDir: string;
    variables: Record<string, string | boolean>;
    skipInstall?: boolean;
    skipGit?: boolean;
}
export interface GenerateResult {
    success: boolean;
    projectPath: string;
    filesCreated: string[];
    duration: number;
    warnings: string[];
    nextSteps: string[];
}
export declare class TemplateEngine extends EventEmitter {
    private templates;
    private customTemplatesDir?;
    constructor(customTemplatesDir?: string);
    /**
     * Get available templates
     */
    getTemplates(): ProjectTemplate[];
    /**
     * Get template by name
     */
    getTemplate(name: string): ProjectTemplate | undefined;
    /**
     * Register custom template
     */
    registerTemplate(template: ProjectTemplate): void;
    /**
     * Load custom templates from directory
     */
    loadCustomTemplates(): Promise<void>;
    /**
     * Generate project from template
     */
    generate(options: GenerateOptions): Promise<GenerateResult>;
    /**
     * Interpolate variables in string
     */
    private interpolate;
    /**
     * Evaluate condition
     */
    private evaluateCondition;
    /**
     * Run command
     */
    private runCommand;
    /**
     * Dispose
     */
    dispose(): void;
}
export declare function getTemplateEngine(customTemplatesDir?: string): TemplateEngine;
export declare function resetTemplateEngine(): void;
/**
 * Quick generate project
 */
export declare function generateProject(options: GenerateOptions): Promise<GenerateResult>;
