package ucca

import "strings"

// DetectIntent classifies the INTERACTION INTENT of a query (Advisor Reasoning
// Stack E3). The same norms answer very differently depending on the TASK the user
// wants: "Was ist X?" (definition) vs "Wie schreibe ich X?" (anleitung) vs "Prüfe X"
// (review). The SDK detects the intent deterministically and emits it; the FE picks
// the answer FORM, so the LLM gets a precise assignment ("write an Anleitung over
// this evidence") instead of guessing the format. Returns "" (neutral) when no
// clear task is signalled. First tier of ~20-30 intent types.
func DetectIntent(query string) string {
	q := " " + strings.ToLower(query) + " "
	has := func(subs ...string) bool {
		for _, s := range subs {
			if strings.Contains(q, s) {
				return true
			}
		}
		return false
	}
	switch {
	case has("prüfe", "prüf mein", "überprüfe", "überprüf", "review", "checke mein",
		"ist mein", "ist meine", "ist unser", "ist unsere", "konform", "stimmt mein",
		"bewerte mein", "analysiere mein"):
		return "review"
	case has("checkliste", "was muss ich alles", "was gehört alles", "was gehört in",
		"welche punkte muss", "was brauche ich alles"):
		return "checkliste"
	case has("vergleich", "unterschied", "worin unterscheid", " vs ", " versus ",
		"gegenüber", "im gegensatz"):
		return "vergleich"
	case has("wie schreibe", "wie erstelle", "wie erstell", "wie mache", "wie baue",
		"wie setze ich", "wie gehe ich vor", "wie formuliere", "wie richte ich",
		"anleitung", "schritt für schritt", "schritt-für-schritt", "erstelle mir",
		"erstell mir", "generiere", "was muss ich beachten", "worauf muss ich achten"):
		return "anleitung"
	case has("welche risiken", "welche gefahren", "risikoanalyse", "welche bedrohungen"):
		return "risikoanalyse"
	case has("was ist", "was bedeutet", "was versteht man", "was sind", "definition",
		"erkläre mir", "erklär mir", "was heißt", "was genau ist"):
		return "definition"
	default:
		return ""
	}
}
