package cmd import ( "fmt" "github.com/runescape-wiki/rsw/internal/render" "github.com/runescape-wiki/rsw/internal/wiki" "github.com/spf13/cobra" ) func newSearchCmd() *cobra.Command { var searchLimit int cmd := &cobra.Command{ Use: "search ", Short: "Search the wiki for pages matching a query", Long: `Search performs a full-text search across the wiki and returns matching page titles with short snippets. Examples: rsw osrs search "dragon scimitar" rsw rs3 search "mining training"`, Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { query := args[0] client := wiki.NewClient(GameBaseURL()) results, err := client.Search(query, searchLimit) if err != nil { return fmt.Errorf("search failed: %w", err) } if len(results) == 0 { fmt.Println("No results found.") return nil } md := render.New() md.H2(fmt.Sprintf("Search results for \"%s\"", query)) for i, r := range results { md.NumberedItem(i+1, fmt.Sprintf("**%s**", r.Title)) if r.Snippet != "" { md.Line(fmt.Sprintf(" %s", r.Snippet)) } } md.Newline() fmt.Print(md.String()) return nil }, } cmd.Flags().IntVar(&searchLimit, "limit", 10, "Maximum number of results") return cmd } func init() { RegisterCommand(newSearchCmd) }