package python_test

import (
	"context"
	"testing"

	"bit.admedia.com/scm/ad/adpilot-indexing-code-parser.com/internal/contracts/graph"
	"bit.admedia.com/scm/ad/adpilot-indexing-code-parser.com/internal/service/parser/analyzers/detectors"
	"bit.admedia.com/scm/ad/adpilot-indexing-code-parser.com/internal/service/parser/analyzers/python"
)

const fastAPISource = `
from fastapi import FastAPI
app = FastAPI()

@app.get("/items")
def list_items():
    return []
`

const flaskSource = `
from flask import Flask
app = Flask(__name__)

@app.route("/health")
def health():
    return "ok"
`

func TestAnalyzerDetectsFastAPIRoute(t *testing.T) {
	a := python.NewAnalyzer(detectors.DefaultRegistry())
	artifact, _, err := a.ParseFile(context.Background(), []byte(fastAPISource), "main.py", "python")
	if err != nil {
		t.Fatalf("ParseFile: %v", err)
	}
	assertRoute(t, artifact.Nodes, "/items", "fastapi")
}

func TestAnalyzerDetectsFlaskRoute(t *testing.T) {
	a := python.NewAnalyzer(detectors.DefaultRegistry())
	artifact, _, err := a.ParseFile(context.Background(), []byte(flaskSource), "app.py", "python")
	if err != nil {
		t.Fatalf("ParseFile: %v", err)
	}
	assertRoute(t, artifact.Nodes, "/health", "flask")
}

func assertRoute(t *testing.T, nodes []graph.Node, route, framework string) {
	t.Helper()
	for _, node := range nodes {
		if node.Metadata != nil && node.Metadata["route"] == route && node.Metadata["framework"] == framework {
			return
		}
	}
	t.Fatalf("expected route %q for framework %q", route, framework)
}
