package iace

import "testing"

func TestIsPatternRelevant(t *testing.T) {
	// A chain-driven crate lift: no press, no outdoor work, no palletizer.
	narrative := "Kistenhubgeraet hebt Behaelter ueber Kette. Elektromotor und SPS-Steuerung. " +
		"Hubwerk mit Plattform und Not-Halt-Taster."
	comps := []string{"Hubwerk", "Kettenantrieb", "Elektromotor (Drehstrom)", "SPS", "Plattform/Buehne"}

	tests := []struct {
		name string
		mp   PatternMatch
		want bool
	}{
		{"foreign: tick bite", PatternMatch{
			PatternName: "Zeckenbiss bei Ausseneinsatz", ScenarioDE: "Zeckenstich bei Arbeiten im Gruenen",
			ZoneDE: "Freigelände, Wald, Wiese"}, false},
		{"foreign: climbing structure", PatternMatch{
			PatternName: "Absturz von Klettergeraet", ScenarioDE: "Kind stuerzt von Klettergeraet auf den Boden",
			ZoneDE: "Klettergeraet, Fallzone darunter"}, false},
		{"foreign: palletizer", PatternMatch{
			PatternName: "Palettierer — mechanisch", ScenarioDE: "Palettierer bewegt schwere Gebinde und quetscht Personen",
			ZoneDE: "Palettierer-Arbeitsraum, Palettenwechselzone"}, false},
		{"foreign: ventilation mold", PatternMatch{
			PatternName: "Schimmelpilz in Lueftungsanlage", ScenarioDE: "Staub mit Nagerkot in selten gereinigten Raeumen",
			ZoneDE: "Lueftungskanal, Filterbereich"}, false},
		{"generic: crush by moving parts", PatternMatch{
			PatternName: "Quetschgefahr durch bewegte Teile", ScenarioDE: "Quetschen zwischen beweglichen und feststehenden Teilen",
			ZoneDE: "Bewegungsbereich"}, true},
		{"generic: electric shock", PatternMatch{
			PatternName: "Direktes Beruehren", ScenarioDE: "Stromschlag bei Beruehrung spannungsfuehrender Teile",
			ZoneDE: "Schaltschrank"}, true},
		{"machine-word match: chain drive", PatternMatch{
			PatternName: "Erfassen durch Kettenantrieb", ScenarioDE: "Einzug an offener Kette",
			ZoneDE: "Kettenbereich"}, true},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := IsPatternRelevant(tt.mp, narrative, comps); got != tt.want {
				t.Errorf("IsPatternRelevant(%q)=%v, want %v", tt.mp.PatternName, got, tt.want)
			}
		})
	}
}
