package com.plexworlds.l3.config import com.plexworlds.l3.llm.provider.Ollama import com.intellij.openapi.options.SearchableConfigurable import com.plexworlds.l3.llm.provider.Providers import javax.swing.JComponent import org.slf4j.Logger import org.slf4j.LoggerFactory class L3Config : SearchableConfigurable { private var panel: L3SettingsPanel? = null private val logger: Logger = LoggerFactory.getLogger(L3Config::class.java) override fun createComponent(): JComponent { val panel = L3SettingsPanel().also { this.panel = it } return panel.mainPanel } override fun isModified(): Boolean { if (panel == null) { logger.error("L3SettingsPanel is null") return false } val l3PersistentState = L3PersistentState.getInstance() val isProviderModified = panel?.providerComboBox?.selectedItem != l3PersistentState.provider val isModelModified = panel?.modelField?.text != l3PersistentState.model; val isUrlModified = panel?.urlField?.text != l3PersistentState.url val isModified = isProviderModified || isModelModified || isUrlModified; logger.debug("isModified: $isModified") return isModified } override fun reset() { val panel = this.panel ?: return val l3PersistentState = L3PersistentState.getInstance() panel.modelField.text = l3PersistentState.model Ollama.changeModel(l3PersistentState.model) } override fun apply() { val panel = this.panel ?: return val state = L3PersistentState.getInstance() val llm = Providers.valueOf(panel.providerComboBox.selectedItem as String).provider val model = panel.modelField.text llm.changeModel(model) state.provider = llm state.model = model state.url = panel.urlField.text } override fun disposeUIResources() { this.panel = null } override fun getDisplayName() = "Local Llama Link" override fun getId() = "com.plexworlds.l3.config.L3Config" }