/**
 * Extension Configuration System
 * Implements Task 3.5: Comprehensive extension configuration system with type-safe schemas, validation, and management utilities
 */
import type { ContentDomainType, PlatformArchitectureType } from '../features/detection/detection-types';
import type { UserArchetype } from '../archetypes/archetype-types';
/**
 * Base extension configuration interface
 */
export interface BaseExtensionConfig {
    /** Extension identifier */
    id: string;
    /** Human-readable name */
    name: string;
    /** Extension description */
    description: string;
    /** Extension version */
    version: string;
    /** Whether the extension is enabled */
    enabled: boolean;
    /** Extension author/maintainer */
    author?: string;
    /** Extension configuration schema version */
    schemaVersion: string;
    /** Extension dependencies */
    dependencies?: string[];
    /** Extension compatibility */
    compatibility: {
        /** Minimum SupaSeed version required */
        minSupaSeedVersion: string;
        /** Platform architectures this extension supports */
        platforms: PlatformArchitectureType[];
        /** Content domains this extension supports */
        domains: ContentDomainType[];
    };
}
/**
 * Domain-specific extension configurations
 */
export interface OutdoorExtensionConfig extends BaseExtensionConfig {
    id: 'outdoor';
    domain: 'outdoor';
    /** Outdoor domain specific settings */
    settings: {
        /** Activity types to generate */
        activityTypes: ('hiking' | 'camping' | 'climbing' | 'biking' | 'skiing' | 'fishing' | 'hunting')[];
        /** Gear categories to include */
        gearCategories: ('backpacks' | 'tents' | 'clothing' | 'footwear' | 'electronics' | 'safety' | 'cooking')[];
        /** Location types for activities */
        locationTypes: ('national_park' | 'state_park' | 'wilderness' | 'urban' | 'coastal' | 'mountain' | 'desert')[];
        /** Weather conditions to simulate */
        weatherConditions: ('sunny' | 'rainy' | 'snowy' | 'windy' | 'foggy' | 'storm')[];
        /** Seasonal preferences */
        seasons: ('spring' | 'summer' | 'fall' | 'winter')[];
        /** Difficulty levels for activities */
        difficultyLevels: ('beginner' | 'intermediate' | 'advanced' | 'expert')[];
        /** User archetypes specific to outdoor domain */
        archetypes: OutdoorArchetype[];
    };
    /** Business logic parameters */
    businessLogic: {
        /** Trip planning constraints */
        tripPlanning: {
            /** Maximum trip duration in days */
            maxTripDuration: number;
            /** Minimum group size */
            minGroupSize: number;
            /** Maximum group size */
            maxGroupSize: number;
            /** Budget constraints */
            budgetRange: {
                min: number;
                max: number;
            };
        };
        /** Gear recommendation engine */
        gearRecommendations: {
            /** Enable weather-based recommendations */
            weatherBased: boolean;
            /** Enable activity-based recommendations */
            activityBased: boolean;
            /** Enable experience-based recommendations */
            experienceBased: boolean;
        };
        /** Safety protocols */
        safetyProtocols: {
            /** Require emergency contacts */
            requireEmergencyContacts: boolean;
            /** Generate safety checklists */
            generateSafetyChecklists: boolean;
            /** Include weather alerts */
            includeWeatherAlerts: boolean;
        };
    };
}
export interface SaaSExtensionConfig extends BaseExtensionConfig {
    id: 'saas';
    domain: 'saas';
    settings: {
        /** SaaS business models */
        businessModels: ('freemium' | 'subscription' | 'usage_based' | 'enterprise' | 'marketplace')[];
        /** Product categories */
        productCategories: ('productivity' | 'communication' | 'analytics' | 'marketing' | 'development' | 'finance')[];
        /** User tiers */
        userTiers: ('free' | 'basic' | 'pro' | 'enterprise')[];
        /** Feature flags and rollout strategies */
        featureFlags: {
            enabled: boolean;
            rolloutStrategies: ('percentage' | 'user_based' | 'geography' | 'plan_based')[];
        };
        /** Multi-tenancy settings */
        multiTenancy: {
            enabled: boolean;
            isolationLevel: 'shared' | 'dedicated' | 'hybrid';
            tenantTypes: ('individual' | 'team' | 'organization' | 'enterprise')[];
        };
    };
    businessLogic: {
        /** Subscription management */
        subscriptions: {
            /** Billing cycles */
            billingCycles: ('monthly' | 'quarterly' | 'annual')[];
            /** Trial periods */
            trialPeriods: number[];
            /** Usage limits per tier */
            usageLimits: Record<string, {
                api_calls?: number;
                storage?: number;
                users?: number;
            }>;
        };
        /** User onboarding flows */
        onboarding: {
            /** Multi-step onboarding */
            multiStep: boolean;
            /** Progressive profiling */
            progressiveProfiling: boolean;
            /** Feature tours */
            featureTours: boolean;
        };
        /** Analytics and tracking */
        analytics: {
            /** User behavior tracking */
            userBehavior: boolean;
            /** Feature usage analytics */
            featureUsage: boolean;
            /** Conversion tracking */
            conversionTracking: boolean;
        };
    };
}
export interface ECommerceExtensionConfig extends BaseExtensionConfig {
    id: 'ecommerce';
    domain: 'ecommerce';
    settings: {
        /** Product categories */
        productCategories: ('electronics' | 'clothing' | 'home' | 'books' | 'sports' | 'beauty' | 'automotive')[];
        /** Payment methods */
        paymentMethods: ('credit_card' | 'paypal' | 'stripe' | 'apple_pay' | 'google_pay' | 'crypto')[];
        /** Shipping methods */
        shippingMethods: ('standard' | 'express' | 'overnight' | 'pickup' | 'digital')[];
        /** Currency support */
        currencies: ('USD' | 'EUR' | 'GBP' | 'CAD' | 'AUD' | 'JPY')[];
        /** Inventory management */
        inventory: {
            /** Track inventory levels */
            trackLevels: boolean;
            /** Enable backorders */
            enableBackorders: boolean;
            /** Low stock alerts */
            lowStockAlerts: boolean;
        };
    };
    businessLogic: {
        /** Pricing strategies */
        pricing: {
            /** Dynamic pricing */
            dynamicPricing: boolean;
            /** Volume discounts */
            volumeDiscounts: boolean;
            /** Seasonal pricing */
            seasonalPricing: boolean;
            /** A/B testing */
            abTesting: boolean;
        };
        /** Order management */
        orders: {
            /** Order statuses */
            statuses: ('pending' | 'processing' | 'shipped' | 'delivered' | 'cancelled' | 'returned')[];
            /** Auto-fulfillment */
            autoFulfillment: boolean;
            /** Return policies */
            returnPolicies: {
                /** Return window in days */
                returnWindow: number;
                /** Restocking fees */
                restockingFees: boolean;
            };
        };
        /** Customer management */
        customers: {
            /** Loyalty programs */
            loyaltyPrograms: boolean;
            /** Customer segments */
            segments: ('new' | 'regular' | 'vip' | 'inactive')[];
            /** Personalization */
            personalization: boolean;
        };
    };
}
export interface SocialExtensionConfig extends BaseExtensionConfig {
    id: 'social';
    domain: 'social';
    settings: {
        /** Social platform types */
        platformTypes: ('general' | 'professional' | 'creative' | 'niche' | 'messaging')[];
        /** Content types */
        contentTypes: ('text' | 'image' | 'video' | 'audio' | 'link' | 'poll' | 'event')[];
        /** Privacy levels */
        privacyLevels: ('public' | 'friends' | 'private' | 'custom')[];
        /** Interaction types */
        interactionTypes: ('like' | 'comment' | 'share' | 'follow' | 'mention' | 'react')[];
        /** Community features */
        communityFeatures: {
            /** Groups/communities */
            groups: boolean;
            /** Events */
            events: boolean;
            /** Messaging */
            messaging: boolean;
            /** Live streaming */
            liveStreaming: boolean;
        };
    };
    businessLogic: {
        /** Content moderation */
        moderation: {
            /** Auto-moderation */
            autoModeration: boolean;
            /** Community reporting */
            communityReporting: boolean;
            /** Content filtering */
            contentFiltering: boolean;
        };
        /** Engagement algorithms */
        engagement: {
            /** Feed algorithms */
            feedAlgorithms: boolean;
            /** Trending detection */
            trendingDetection: boolean;
            /** Recommendation engine */
            recommendationEngine: boolean;
        };
        /** Privacy and security */
        privacy: {
            /** Data retention policies */
            dataRetention: number;
            /** User blocking */
            userBlocking: boolean;
            /** Content encryption */
            contentEncryption: boolean;
        };
    };
}
/**
 * Outdoor-specific user archetype
 */
export interface OutdoorArchetype extends UserArchetype {
    domain: 'outdoor';
    outdoorProfile: {
        /** Experience level */
        experienceLevel: 'beginner' | 'intermediate' | 'advanced' | 'expert';
        /** Preferred activities */
        preferredActivities: string[];
        /** Gear ownership level */
        gearOwnership: 'minimal' | 'moderate' | 'extensive' | 'professional';
        /** Location preferences */
        locationPreferences: string[];
        /** Seasonal activity preferences */
        seasonalPreferences: Record<string, string[]>;
    };
}
/**
 * Extension validation configuration
 */
export interface ExtensionValidationConfig {
    /** Enable validation */
    enabled: boolean;
    /** Validation rules */
    rules: {
        /** Require all mandatory fields */
        requireMandatoryFields: boolean;
        /** Validate compatibility versions */
        validateCompatibility: boolean;
        /** Check dependency resolution */
        checkDependencies: boolean;
        /** Validate business logic constraints */
        validateBusinessLogic: boolean;
    };
    /** Custom validation functions */
    customValidators?: Array<(config: any) => {
        valid: boolean;
        errors: string[];
    }>;
}
/**
 * Extension template configuration
 */
export interface ExtensionTemplate {
    /** Template identifier */
    id: string;
    /** Template name */
    name: string;
    /** Template description */
    description: string;
    /** Domain this template applies to */
    domain: ContentDomainType;
    /** Template configuration */
    template: Partial<BaseExtensionConfig>;
    /** Template variables */
    variables?: Record<string, {
        type: 'string' | 'number' | 'boolean' | 'array' | 'object';
        description: string;
        default?: any;
        required: boolean;
    }>;
}
/**
 * Main extensions configuration interface
 */
export interface ExtensionsConfig {
    /** Configuration metadata */
    metadata: {
        /** Configuration version */
        version: string;
        /** Last updated timestamp */
        lastUpdated: Date;
        /** Configuration author */
        author?: string;
    };
    /** Global extension settings */
    global: {
        /** Enable extension system */
        enabled: boolean;
        /** Maximum number of active extensions */
        maxActiveExtensions: number;
        /** Extension loading timeout in ms */
        loadingTimeout: number;
        /** Enable extension hot-reloading */
        hotReload: boolean;
    };
    /** Validation configuration */
    validation: ExtensionValidationConfig;
    /** Available extension templates */
    templates: ExtensionTemplate[];
    /** Active extensions configuration */
    extensions: {
        /** Outdoor domain extension */
        outdoor?: OutdoorExtensionConfig;
        /** SaaS domain extension */
        saas?: SaaSExtensionConfig;
        /** E-commerce domain extension */
        ecommerce?: ECommerceExtensionConfig;
        /** Social domain extension */
        social?: SocialExtensionConfig;
        /** Custom extensions */
        [key: string]: BaseExtensionConfig | undefined;
    };
    /** Extension loading order */
    loadOrder: string[];
    /** Extension conflict resolution */
    conflictResolution: {
        /** Strategy for resolving conflicts */
        strategy: 'first_wins' | 'last_wins' | 'merge' | 'manual';
        /** Manual resolution rules */
        manualRules?: Record<string, any>;
    };
}
/**
 * Extension configuration manager result
 */
export interface ExtensionConfigResult {
    /** Whether the operation was successful */
    success: boolean;
    /** Result data */
    data?: any;
    /** Error messages */
    errors: string[];
    /** Warning messages */
    warnings: string[];
    /** Applied configuration */
    appliedConfig?: ExtensionsConfig;
}
/**
 * Extension configuration manager
 */
export declare class ExtensionConfigManager {
    private config;
    constructor(config: ExtensionsConfig);
    /**
     * Validate extension configuration
     */
    validate(): ExtensionConfigResult;
    /**
     * Get extension by ID
     */
    getExtension(id: string): BaseExtensionConfig | undefined;
    /**
     * Enable extension
     */
    enableExtension(id: string): ExtensionConfigResult;
    /**
     * Disable extension
     */
    disableExtension(id: string): ExtensionConfigResult;
    /**
     * Get enabled extensions
     */
    getEnabledExtensions(): BaseExtensionConfig[];
    /**
     * Get extensions by domain
     */
    getExtensionsByDomain(domain: ContentDomainType): BaseExtensionConfig[];
    /**
     * Create extension from template
     */
    createFromTemplate(templateId: string, variables?: Record<string, any>): ExtensionConfigResult;
    /**
     * Simple variable substitution helper
     */
    private substituteVariable;
    /**
     * Export configuration
     */
    exportConfig(): ExtensionsConfig;
}
/**
 * Create default extensions configuration
 */
export declare function createDefaultExtensionsConfig(): ExtensionsConfig;
/**
 * Extension configuration utilities
 */
export declare const ExtensionConfigUtils: {
    /**
     * Merge extension configurations
     */
    mergeConfigs(base: ExtensionsConfig, override: Partial<ExtensionsConfig>): ExtensionsConfig;
    /**
     * Validate extension ID format
     */
    validateExtensionId(id: string): boolean;
    /**
     * Check version compatibility
     */
    isVersionCompatible(requiredVersion: string, currentVersion: string): boolean;
};
export default ExtensionConfigManager;
//# sourceMappingURL=extension-config.d.ts.map