package dart_test

import (
	"context"
	"testing"

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

const flutterSource = `
import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return const Text('Hello');
  }
}

Future<void> loadData() async {
}
`

func TestAnalyzerExtractsFlutterWidget(t *testing.T) {
	a := dart.NewAnalyzer(detectors.DefaultRegistry())
	artifact, chunks, err := a.ParseFile(context.Background(), []byte(flutterSource), "lib/home_page.dart", "dart")
	if err != nil {
		t.Fatalf("ParseFile: %v", err)
	}
	if len(chunks) == 0 {
		t.Fatal("expected chunks")
	}

	foundImport := false
	foundClass := false
	foundBuildMethod := false
	foundFlutterComponent := false
	for _, node := range artifact.Nodes {
		if node.Name == "package:flutter/material.dart" {
			foundImport = true
		}
		if node.Name == "HomePage" && node.Metadata != nil && node.Metadata["type_kind"] == "class" {
			foundClass = true
		}
		if node.Name == "build" && node.Metadata != nil && node.Metadata["symbol_type"] == string(events.SymbolTypeMethod) {
			foundBuildMethod = true
		}
		if node.Name == "HomePage" && node.Metadata != nil && node.Metadata["framework"] == "flutter" {
			foundFlutterComponent = true
		}
	}
	if !foundImport {
		t.Fatal("expected flutter import node")
	}
	if !foundClass {
		t.Fatal("expected dart class node")
	}
	if !foundBuildMethod {
		t.Fatal("expected build method node")
	}
	if !foundFlutterComponent {
		t.Fatal("expected flutter component node")
	}
}
