#ifndef MODELSETTINGSDIALOG_H
#define MODELSETTINGSDIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QComboBox>
#include <QCheckBox>
#include <QTextEdit>
#include <QTabWidget>
#include <QFileDialog>
#include <QMessageBox>
#include <QSettings>

struct ModelConfig {
    QString name;
    QString modelPath;
    QString tokensPath;
    QString lexiconPath;
    QString dictDirPath;
    QString dataDirPath;
    bool isEnabled;
    QString description;
};

class ModelSettingsDialog : public QDialog {
    Q_OBJECT

public:
    explicit ModelSettingsDialog(QWidget* parent = nullptr);
    ~ModelSettingsDialog();

    // 获取当前配置
    ModelConfig getCurrentOfflineASRConfig() const;
    ModelConfig getCurrentOnlineASRConfig() const;
    ModelConfig getCurrentKWSConfig() const;
    ModelConfig getCurrentTTSConfig() const;
    
    // 设置当前配置
    void setCurrentOfflineASRConfig(const ModelConfig& config);
    void setCurrentOnlineASRConfig(const ModelConfig& config);
    void setCurrentKWSConfig(const ModelConfig& config);
    void setCurrentTTSConfig(const ModelConfig& config);
    
    // KWS参数获取和设置
    struct KWSParams {
        float threshold = 0.25f;        // 关键词阈值
        int maxActivePaths = 8;         // 最大活跃路径数
        int numTrailingBlanks = 2;      // 尾随空白数
        float keywordsScore = 1.5f;     // 关键词分数权重
        int numThreads = 2;             // 线程数
    };
    
    KWSParams getCurrentKWSParams() const;
    void setCurrentKWSParams(const KWSParams& params);

signals:
    void modelsChanged();

private slots:
    void browseOfflineASRModel();
    void browseOfflineASRTokens();
    void browseOnlineASRModel();
    void browseOnlineASRTokens();
    void browseKWSModel();
    void browseKWSTokens();
    void browseKWSKeywords();
    void browseTTSModel();
    void browseTTSTokens();
    void browseTTSLexicon();
    void browseTTSDictDir();
    void browseTTSDataDir();
    
    void onOfflineASRModelChanged();
    void onOnlineASRModelChanged();
    void onKWSModelChanged();
    void onTTSModelChanged();
    
    void testOfflineASRModel();
    void testOnlineASRModel();
    void testKWSModel();
    void testTTSModel();
    
    void saveSettings();
    void loadSettings();
    void resetToDefaults();
    
    void scanForModels();
    
    // KWS参数相关槽函数
    void onKWSParamsChanged();
    void resetKWSParams();
    void validateKWSParams();

private:
    void setupUI();
    void setupOfflineASRTab();
    void setupOnlineASRTab();
    void setupKWSTab();
    void setupTTSTab();
    void setupAdvancedTab();
    void connectSignals();
    
    void updateOfflineASRModelInfo();
    void updateOnlineASRModelInfo();
    void updateKWSModelInfo();
    void updateTTSModelInfo();
    
    bool validateOfflineASRConfig() const;
    bool validateOnlineASRConfig() const;
    bool validateKWSConfig() const;
    bool validateTTSConfig() const;
    
    QString getDefaultDataPath() const;
    QStringList scanForOfflineASRModels() const;
    QStringList scanForOnlineASRModels() const;
    QStringList scanForKWSModels() const;
    QStringList scanForTTSModels() const;

    // UI组件
    QTabWidget* tabWidget;
    
    // 离线ASR标签页
    QWidget* offlineAsrTab;
    QLineEdit* offlineAsrModelPathEdit;
    QLineEdit* offlineAsrTokensPathEdit;
    QComboBox* offlineAsrModelCombo;
    QTextEdit* offlineAsrModelInfoEdit;
    QPushButton* testOfflineASRBtn;
    
    // 在线ASR标签页
    QWidget* onlineAsrTab;
    QLineEdit* onlineAsrModelPathEdit;
    QLineEdit* onlineAsrTokensPathEdit;
    QComboBox* onlineAsrModelCombo;
    QTextEdit* onlineAsrModelInfoEdit;
    QPushButton* testOnlineASRBtn;
    
    // 语音唤醒标签页
    QWidget* kwsTab;
    QLineEdit* kwsModelPathEdit;
    QLineEdit* kwsTokensPathEdit;
    QLineEdit* kwsKeywordsPathEdit;
    QComboBox* kwsModelCombo;
    QTextEdit* kwsModelInfoEdit;
    QPushButton* testKWSBtn;
    
    // KWS参数设置控件
    QGroupBox* kwsParamsGroup;
    QLineEdit* kwsThresholdEdit;        // 关键词阈值
    QLineEdit* kwsMaxActivePathsEdit;   // 最大活跃路径数
    QLineEdit* kwsTrailingBlanksEdit;   // 尾随空白数
    QLineEdit* kwsKeywordsScoreEdit;    // 关键词分数权重
    QLineEdit* kwsNumThreadsEdit;       // 线程数
    QPushButton* kwsResetParamsBtn;     // 重置参数按钮
    
    // TTS标签页
    QWidget* ttsTab;
    QLineEdit* ttsModelPathEdit;
    QLineEdit* ttsTokensPathEdit;
    QLineEdit* ttsLexiconPathEdit;
    QLineEdit* ttsDictDirPathEdit;
    QLineEdit* ttsDataDirPathEdit;
    QComboBox* ttsModelCombo;
    QTextEdit* ttsModelInfoEdit;
    QPushButton* testTTSBtn;
    
    // 高级设置标签页
    QWidget* advancedTab;
    QLineEdit* dataPathEdit;
    QCheckBox* autoScanCheckBox;
    QCheckBox* enableLoggingCheckBox;
    
    // 按钮
    QPushButton* saveBtn;
    QPushButton* cancelBtn;
    QPushButton* resetBtn;
    QPushButton* scanBtn;
    
    // 设置存储
    QSettings* settings;
};

#endif // MODELSETTINGSDIALOG_H