#pragma once

#include <QObject>
#include <QString>
#include <QHash>

class CodeEditor;
class SignatureTooltip;

// ---------------------------------------------------------------------------
// SignatureHelper – Lädt die PHP-Funktionsdatenbank und zeigt beim Tippen
// automatisch die passende Funktionssignatur als Tooltip.
//
// Logik:
//   • Bei jedem Tastendruck: Text links vom Cursor analysieren
//   • Wenn "funktionsname(" erkannt wird → Tooltip anzeigen
//   • Wenn ")" die öffnende Klammer schließt → Tooltip verstecken
//   • Wenn Cursor sich weg bewegt → Tooltip verstecken
// ---------------------------------------------------------------------------
class SignatureHelper : public QObject
{
    Q_OBJECT

public:
    explicit SignatureHelper(CodeEditor *editor);

private slots:
    void onCursorPositionChanged();

private:
    struct FunctionInfo
    {
        QString signature;
        QString description;
    };

    void loadDatabase();
    void loadProjectFunctions();

    // Extrahiert den Funktionsnamen direkt links vor dem letzten '('
    // Gibt leeren String zurück wenn kein Kontext gefunden
    QString extractFunctionName(const QString &textUpToCursor) const;

    // Zählt offene Klammern — bei 0 ist der Aufruf abgeschlossen
    int countOpenParens(const QString &textUpToCursor) const;

    CodeEditor        *m_editor  = nullptr;
    SignatureTooltip  *m_tooltip = nullptr;

    QHash<QString, FunctionInfo> m_functions;  // name → info
};
