/**
 * AgentC Template System Types
 * 서비스 티어별 템플릿 시스템의 핵심 타입 정의
 */
export declare enum ServiceTier {
    STARTER = "STARTER",
    STANDARD = "STANDARD",
    PLUS = "PLUS"
}
export declare enum ComponentType {
    HEADER = "HEADER",
    HERO = "HERO",
    ABOUT = "ABOUT",
    SERVICES = "SERVICES",
    TESTIMONIALS = "TESTIMONIALS",
    PORTFOLIO = "PORTFOLIO",
    PRICING = "PRICING",
    FAQ = "FAQ",
    BLOG = "BLOG",
    CONTACT = "CONTACT",
    FOOTER = "FOOTER",
    TEAM = "TEAM",
    GALLERY = "GALLERY",
    NEWSLETTER = "NEWSLETTER",
    CASE_STUDIES = "CASE_STUDIES",
    SOCIAL = "SOCIAL"
}
export interface BaseComponent {
    id: string;
    type: ComponentType;
    title: string;
    description?: string;
    isRequired: boolean;
    availableIn: ServiceTier[];
    order: number;
    settings: ComponentSettings;
}
export interface ComponentSettings {
    [key: string]: unknown;
    enabled: boolean;
    visible: boolean;
    customizable: boolean;
}
export interface BaseTemplate {
    id: string;
    name: string;
    slug: string;
    tier: ServiceTier;
    description: string;
    components: BaseComponent[];
    globalSettings: GlobalTemplateSettings;
    customizationOptions: CustomizationOptions;
    metadata: TemplateMetadata;
}
export interface GlobalTemplateSettings {
    theme: {
        primaryColor: string;
        secondaryColor: string;
        accentColor?: string;
        fontFamily: string;
        borderRadius: number;
    };
    layout: {
        containerWidth: "full" | "contained" | "narrow";
        spacing: "compact" | "normal" | "spacious";
        headerStyle: "simple" | "standard" | "advanced";
        footerStyle: "minimal" | "standard" | "comprehensive";
    };
    seo: {
        metaTitle?: string;
        metaDescription?: string;
        ogImage?: string;
        structuredData?: boolean;
    };
    performance: {
        lazyLoading: boolean;
        cacheStrategy: "none" | "basic" | "aggressive";
        optimizeImages: boolean;
    };
    customProperties?: {
        [key: string]: unknown;
        features?: string[];
        tier?: ServiceTier;
        maxComponents?: number;
        advancedCustomization?: boolean;
        prioritySupport?: boolean;
        whiteLabel?: unknown;
        i18n?: unknown;
        ecommerce?: unknown;
        analytics?: unknown;
    };
}
export interface CustomizationOptions {
    colors: {
        allowCustomColors: boolean;
        predefinedPalettes: string[][];
        maxCustomColors?: number;
    };
    typography: {
        allowFontChange: boolean;
        availableFonts: string[];
        allowFontSizeChange: boolean;
    };
    layout: {
        allowLayoutChange: boolean;
        availableLayouts: string[];
        allowComponentReordering: boolean;
    };
    components: {
        allowComponentToggle: boolean;
        allowComponentSettings: boolean;
        restrictedComponents: ComponentType[];
    };
    advanced: {
        allowCustomCSS: boolean;
        allowCustomJS: boolean;
        allowThirdPartyIntegrations: boolean;
    };
}
export interface TemplateMetadata {
    version: string;
    lastModified: Date;
    author: string;
    category: string;
    tags: string[];
    previewImages: string[];
    demoUrl?: string;
    documentation?: string;
    minimumTier: ServiceTier;
    features: string[];
    compatibility: {
        browsers: string[];
        devices: string[];
        frameworks: string[];
    };
}
export interface ComponentRenderConfig {
    component: BaseComponent;
    props: Record<string, unknown>;
    children?: ComponentRenderConfig[];
    conditionalRender?: {
        condition: string;
        fallback?: ComponentRenderConfig;
    };
}
export interface TemplateRenderConfig {
    template: BaseTemplate;
    components: ComponentRenderConfig[];
    globalProps: Record<string, unknown>;
    context: TemplateContext;
}
export interface TemplateContext {
    siteData: {
        id: string;
        name: string;
        domain: string;
        tier: ServiceTier;
    };
    userData: {
        id: string;
        name: string;
        role: string;
        permissions: string[];
    };
    content: Record<string, unknown>;
    settings: Record<string, unknown>;
}
export interface ComponentRegistry {
    register(component: ComponentDefinition): void;
    get(type: ComponentType, tier: ServiceTier): ComponentDefinition | null;
    getAvailable(tier: ServiceTier): ComponentDefinition[];
    validate(component: BaseComponent, tier: ServiceTier): boolean;
}
export interface ComponentDefinition {
    type: ComponentType;
    name: string;
    description: string;
    tier: ServiceTier;
    component: React.ComponentType<unknown>;
    defaultSettings: ComponentSettings;
    schema: ComponentSchema;
    preview?: React.ComponentType<unknown>;
}
export interface ComponentSchema {
    type: "object";
    properties: Record<string, SchemaProperty>;
    required: string[];
    additionalProperties: boolean;
}
export interface SchemaProperty {
    type: "string" | "number" | "boolean" | "array" | "object";
    description: string;
    default?: unknown;
    enum?: unknown[];
    items?: SchemaProperty;
    properties?: Record<string, SchemaProperty>;
}
export interface TemplateFactory {
    create(tier: ServiceTier, config: Partial<BaseTemplate>): BaseTemplate;
    clone(template: BaseTemplate): BaseTemplate;
    migrate(template: BaseTemplate, newTier: ServiceTier): BaseTemplate;
    validate(template: BaseTemplate): TemplateValidationResult;
}
export interface TemplateValidationResult {
    isValid: boolean;
    errors: TemplateValidationError[];
    warnings: TemplateValidationWarning[];
}
export interface TemplateValidationError {
    code: string;
    message: string;
    component?: string;
    severity: "error" | "warning";
}
export interface TemplateValidationWarning {
    code: string;
    message: string;
    component?: string;
    suggestion?: string;
}
export interface TemplateManager {
    getTemplate(id: string): Promise<BaseTemplate | null>;
    saveTemplate(template: BaseTemplate): Promise<void>;
    deleteTemplate(id: string): Promise<void>;
    listTemplates(tier?: ServiceTier): Promise<BaseTemplate[]>;
    applyTemplate(siteId: string, templateId: string): Promise<void>;
    migrateContent(fromTemplate: string, toTemplate: string): Promise<void>;
}
//# sourceMappingURL=template-system.d.ts.map