package formatter import ( "encoding/json" "fmt" "strings" "git.db.org.ai/dborg/internal/models" ) func FormatSLResults(resp *models.SLResponse, asJSON bool) (string, error) { if asJSON { data, err := json.MarshalIndent(resp.Hits, "", " ") if err != nil { return "", fmt.Errorf("failed to marshal JSON: %w", err) } return string(data), nil } var sb strings.Builder if len(resp.Hits) == 0 { sb.WriteString(fmt.Sprintf("\n%s\n\n", Gray("No results found"))) return sb.String(), nil } sb.WriteString(fmt.Sprintf("%s %s %s\n", Cyan("Found"), Bold(Yellow(fmt.Sprintf("%d", resp.NumHits))), Cyan("credentials"))) sb.WriteString("\n") for i, hit := range resp.Hits { if i > 0 { sb.WriteString(Dim("───")) sb.WriteString("\n") } sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Username:"), Bold(hit.Username))) if hit.Password != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Password:"), Yellow(hit.Password))) } if hit.URL != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("URL:"), Blue(hit.URL))) } if hit.Filename != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Source:"), Magenta(hit.Filename))) } sb.WriteString("\n") } if resp.Credits.Unlimited { sb.WriteString(fmt.Sprintf("%s: %s\n", Dim("Credits"), Green("Unlimited"))) } else { sb.WriteString(fmt.Sprintf("%s: %s\n", Dim("Credits Remaining"), FormatCredits(int64(resp.Credits.Remaining)))) } return sb.String(), nil }