/* jshint esversion: 2024, module: true */ /** * Configuration Manager for handling config files * @class ConfigManager */ class ConfigManager { /** * @param {Object} elements - DOM elements * @param {ApiClient} apiClient - API client instance * @param {Object} state - Application state */ constructor(elements, apiClient, state) { this.elements = elements; this.apiClient = apiClient; this.state = state; } /** * Refresh configuration file list * @method refreshConfigs */ async refreshConfigs() { try { const data = await this.apiClient.get('/api/configs'); this.elements.inputs.configSelect.innerHTML = ''; data.files?.forEach(file => { const option = new Option(file, file); this.elements.inputs.configSelect.add(option); }); if (data.files?.length > 0) { this.state.currentConfigFile = data.files[0]; await this.loadConfig(); } else { this.elements.inputs.cfgEditor.value = ''; this.state.currentConfigFile = null; } } catch (error) { alert(`Failed to list configs: ${error.message}`); } } /** * Load selected configuration file * @method loadConfig */ async loadConfig() { const name = this.elements.inputs.configSelect.value; if (!name) return; this.state.currentConfigFile = name; try { const text = await this.apiClient.getText(`/api/config/${encodeURIComponent(name)}`); this.elements.inputs.cfgEditor.value = text; this.elements.outputs.validateResult.textContent = ''; } catch (error) { alert(`Failed to load: ${error.message}`); } } /** * Validate current configuration * @method validateConfig */ async validateConfig() { const name = this.elements.inputs.configSelect.value; const content = this.elements.inputs.cfgEditor.value; this.elements.outputs.validateResult.textContent = 'Validating...'; this.elements.outputs.validateResult.className = 'validation-pending'; try { const result = await this.apiClient.post('/api/validate', { name, content }); if (result.ok) { this.elements.outputs.validateResult.textContent = '✓ Configuration is valid'; this.elements.outputs.validateResult.className = 'validation-success'; } else { this.elements.outputs.validateResult.textContent = `✗ ${result.output || 'Validation failed'}`; this.elements.outputs.validateResult.className = 'validation-error'; } } catch (error) { this.elements.outputs.validateResult.textContent = `✗ Error: ${error.message}`; this.elements.outputs.validateResult.className = 'validation-error'; } } } export { ConfigManager };