#pragma once

#include <QObject>
#include <QString>
#include <QStringList>
#include <QList>

// ---------------------------------------------------------------------------
// FunctionScanner – Scannt PHP-Dateien nach Funktionsdefinitionen.
//
// Liefert für jede gefundene Funktion:
//   - Name
//   - Parameter (vollständige Signatur)
//   - Dateipfad
//   - Zeilennummer
//
// Wird von FunctionListPanel (Anzeige) und DeadCodeAnalyzer (Stufe 1)
// gemeinsam genutzt.
// ---------------------------------------------------------------------------
class FunctionScanner : public QObject
{
    Q_OBJECT

public:
    struct FunctionInfo
    {
        QString name;        // Funktionsname
        QString parameters;  // Parameter wie definiert, z.B. "$id, $name = null"
        QString signature;   // name(parameters) — fertig formatiert
        QString filePath;    // Absoluter Pfad zur Datei
        int     line = 0;    // Zeilennummer der Definition
        QString className;   // Klassen- oder Namespace-Kontext, leer = global
    };

    explicit FunctionScanner(QObject *parent = nullptr);

    // Synchroner Scan — für direkten Aufruf aus Threads
    QList<FunctionInfo> scanDirectory(const QString &rootPath,
                                      const QStringList &extensions = {"*.php"}) const;

    // Scannt eine einzelne Datei
    QList<FunctionInfo> scanFile(const QString &filePath) const;

private:
    static QString extractParameters(const QString &line, int parenPos);
    static QString detectClassContext(const QStringList &lines, int functionLineIndex);
};
