// Package sanitize strips third-party AI branding, telemetry headers, and
// identifying metadata from prompts before they are forwarded to the Cursor
// CLI. Without this, the Cursor agent sees "You are Claude Code..." style
// system prompts and behaves confusingly (trying to use tools it doesn't
// own, reasoning about being "Anthropic's CLI", etc.).
//
// Ported from cursor-api-proxy/src/lib/sanitize.ts.
package sanitize

import "regexp"

type rule struct {
	pattern *regexp.Regexp
	replace string
}

// Note: Go regexp is RE2, no lookbehind/lookahead, but these rules don't need any.
// (?i) enables case-insensitive for that single rule.
var rules = []rule{
	// Strip x-anthropic-billing-header line (injected by Claude Code CLI).
	{regexp.MustCompile(`(?i)x-anthropic-billing-header:[^\n]*\n?`), ""},
	// Strip individual telemetry tokens that may appear in headers or text.
	{regexp.MustCompile(`(?i)\bcc_version=[^\s;,\n]+[;,]?\s*`), ""},
	{regexp.MustCompile(`(?i)\bcc_entrypoint=[^\s;,\n]+[;,]?\s*`), ""},
	{regexp.MustCompile(`(?i)\bcch=[a-f0-9]+[;,]?\s*`), ""},
	// Replace "Claude Code" product name with "Cursor" (case-sensitive on purpose).
	{regexp.MustCompile(`\bClaude Code\b`), "Cursor"},
	// Replace full Anthropic CLI description. Handle both straight and curly apostrophes.
	{regexp.MustCompile(`(?i)Anthropic['\x{2019}]s official CLI for Claude`), "Cursor AI assistant"},
	// Replace remaining Anthropic brand references.
	{regexp.MustCompile(`\bAnthropic\b`), "Cursor"},
	// Known Anthropic domains.
	{regexp.MustCompile(`(?i)anthropic\.com`), "cursor.com"},
	{regexp.MustCompile(`(?i)claude\.ai`), "cursor.sh"},
	// Normalise leftover leading semicolons/whitespace at start of content.
	{regexp.MustCompile(`^[;,\s]+`), ""},
}

// Text applies all sanitization rules to s.
func Text(s string) string {
	if s == "" {
		return s
	}
	for _, r := range rules {
		s = r.pattern.ReplaceAllString(s, r.replace)
	}
	return s
}
