package formatter import ( "encoding/json" "fmt" "strings" "git.db.org.ai/dborg/internal/models" ) func FormatMoonResults(resp *models.MoonResponse, asJSON bool) (string, error) { if asJSON { data, err := json.MarshalIndent(resp.Results, "", " ") if err != nil { return "", fmt.Errorf("failed to marshal JSON: %w", err) } return string(data), nil } var sb strings.Builder if resp.Results == nil { sb.WriteString(fmt.Sprintf("\n%s\n\n", Gray("No results found"))) return sb.String(), nil } resultsMap, ok := resp.Results.(map[string]interface{}) if !ok { resultsJSON, err := json.MarshalIndent(resp.Results, "", " ") if err != nil { return "", fmt.Errorf("failed to format results: %w", err) } return string(resultsJSON), nil } hits, ok := resultsMap["hits"].([]interface{}) if !ok || len(hits) == 0 { sb.WriteString(fmt.Sprintf("\n%s\n\n", Gray("No results found"))) return sb.String(), nil } numHits, _ := resultsMap["num_hits"].(float64) elapsed, _ := resultsMap["elapsed_time_micros"].(float64) sb.WriteString(fmt.Sprintf("%s %s %s\n", Cyan("Found"), Bold(Yellow(fmt.Sprintf("%d", int(numHits)))), Cyan(fmt.Sprintf("moon log entries (%.2fms)", elapsed/1000)))) sb.WriteString("\n") for i, hit := range hits { hitMap, ok := hit.(map[string]interface{}) if !ok { continue } if i > 0 { sb.WriteString(Dim("───")) sb.WriteString("\n") } username, _ := hitMap["username"].(string) password, _ := hitMap["password"].(string) url, _ := hitMap["url"].(string) filename, _ := hitMap["filename"].(string) sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Username:"), Bold(username))) if password != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Password:"), Yellow(password))) } if url != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("URL:"), Blue(url))) } if filename != "" { sb.WriteString(fmt.Sprintf("%s %s\n", Dim("Source:"), Magenta(filename))) } sb.WriteString("\n") } return sb.String(), nil }