// Base filesystem class that defines the common interface for all filesystem implementations
import { parseHex, validateInput, checkDependencies, updateResultItem } from '../utils.js';
export class BaseFilesystem {
    constructor(name, variants = []) {
        this.name = name;
        this.variants = variants; // Array of variant configurations
    }
    // Abstract method to be implemented by subclasses
    getVariants() {
        return this.variants;
    }
    // Generate HTML for constants section
    generateConstantsHTML(variantId) {
        const variant = this.variants.find(v => v.id === variantId);
        if (!variant) return '';
        return `
            
                
                    ${this.generateConstantsHTML(variantId)}
                    
                        
Hex-Rechner
                        ${calculatorHTML}
                    
                
                ${this.generateInputsHTML(variantId)}
                ${this.generateResultsHTML(variantId)}
                ${this.generateFormulasHTML(variantId)}
            
 
        `;
    }
    // Abstract method for calculations - to be implemented by subclasses
    calculate(variantId) {
        throw new Error('calculate method must be implemented by subclass');
    }
    // Setup input event listeners for this filesystem
    setupInputListeners(variantId) {
        const variant = this.variants.find(v => v.id === variantId);
        if (!variant) return;
        const allInputIds = [
            ...variant.constants.map(c => c.id),
            ...variant.inputs.map(i => i.id)
        ];
        allInputIds.forEach(inputId => {
            const input = document.getElementById(inputId);
            if (input) {
                input.addEventListener('input', () => {
                    validateInput(inputId, input.value);
                    this.calculate(variantId);
                });
            }
        });
    }
    // Get all input values for a variant
    getInputValues(variantId) {
        const variant = this.variants.find(v => v.id === variantId);
        if (!variant) return {};
        const values = {};
        
        // Get constants
        variant.constants.forEach(constant => {
            const element = document.getElementById(constant.id);
            if (element) {
                values[constant.id] = parseHex(element.value) || 0;
            }
        });
        // Get inputs
        variant.inputs.forEach(input => {
            const element = document.getElementById(input.id);
            if (element) {
                values[input.id] = parseHex(element.value);
            }
        });
        return values;
    }
}