// ctaitextedit.h
#ifndef CTAI_HISTORY_TEXTEDIT_H
#define CTAI_HISTORY_TEXTEDIT_H

// Qt核心组件
#include <QWidget>
#include <QString>
#include <QApplication>
#include <QClipboard>
// Qt布局相关
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSpacerItem>

// Qt控件相关
#include <QPushButton>
#include <QTextEdit>
#include <QLineEdit>
#include <QFrame>
#include <QMenu>
#include <QAction>
#include <QAbstractTextDocumentLayout>
#include <QTimer>
// Qt对话框
#include <QFileDialog>
#include <QMessageBox>

// 系统相关
#include <mutex>

// 项目相关头文件
#include "ctai_base.h"
#include "ctai_markdown.h"

typedef struct tokens_args{
  QString prompt_tokens={};
  QString completion_tokens={};
  QString total_tokens={};
  QString cache_hit_tokens={};
  QString cache_miss_tokens={};
}tokens_data;

std::mutex m_mutex;

class ctai_history_textedit : public QWidget
{
    Q_OBJECT
public:
    ctai_history_textedit(QWidget *parent = nullptr);
    ~ctai_history_textedit();
    void init_layout(msg_type msg_type_mode);
    void add_user_message(const model_data &message);
    void add_system_message(const model_data &message);
    void update_tokens_message(const model_data &message);
    void add_header_message(const model_data &message);
private slots:
    void on_delete_clicked();    // 删除按钮
    void on_copy_clicked();      // 复制按钮
    void on_save_clicked();      // 保存按钮
    void on_menu_clicked();      // 菜单按钮
    void on_fold_clicked();      // 折叠按钮
    void on_tokens_clicked();    // tokens按钮
    void on_save_text();         // 保存文本
    void on_save_html();         // 保存html
    void on_save_markdown();     // 保存markdown
    void on_save_pdf();          // 保存pdf
    void on_text_height();
signals:
    void delete_requested(QString);      // 请求删除此消息 
    void current_row_height_changed();
    void fold_row_height_changed();
private:  
    void connect_signals(msg_type msg_type_mode);       // 连接信号和槽
private:
    QFrame      *hLine;
    QSpacerItem *sparcer_item = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed);
    QVBoxLayout *mainLayout={};
    QVBoxLayout *headerLayout={};
    QHBoxLayout *header_info_Layout={};
    QVBoxLayout *historyLayout={};
    QHBoxLayout *header_opts_Layout={};
    
    QPushButton   *m_msg_system_header_ico={};
    QPushButton   *m_msg_user_header_ico={};
    QLineEdit     *m_msg_header={};
    QTextEdit     *m_msg_history={};
    QPushButton   *m_msg_user_del={};
    QPushButton   *m_msg_system_del={};
    QPushButton   *m_msg_copy={};
    QPushButton   *m_msg_save={};
    QPushButton   *m_msg_menu={};
    QPushButton   *m_msg_fold={};  // 折叠按钮
    QPushButton   *m_msg_tokens={};
    QPushButton   *m_history_to_send={};
    QPushButton   *m_restart_to_send={};
    //tokens消耗显示
    QMenu         *m_msg_tokens_menu={};
    QAction       *m_menu_prompt_tokens={};
    QAction       *m_menu_completion_tokens={};
    QAction       *m_menu_total_tokens={};
    QAction       *m_menu_cache_hit_tokens={};
    QAction       *m_menu_cache_miss_tokens={};
    //save保存菜单
    QMenu         *m_msg_save_menu={};
    QAction       *m_msg_save_text={};
    QAction       *m_msg_save_html={};
    QAction       *m_msg_save_markdown={};
    QAction       *m_msg_save_pdf={};
    // 保存展开时的原始高度
    int m_original_height = 0;
    //折叠状态
    bool m_is_folded = false;
    //本次会话的tokens消耗信息
    tokens_data m_tokens_data;
    //本次信息ID
    QString      m_msg_sned_id={};
    //本次信息
    QString      m_current_content;
    QSpacerItem *bottom_spacer = new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
    
};

#endif // ctai_history_textedit_H
