/** @module
  Search Wikipedia and read article summaries or full text from Agency code.

  ```ts
  import { search, summary } from "std::wikipedia"

  node main() {
    const results = search("Ada Lovelace")
    const intro = summary(results[0].title)
    print(intro.extract)
  }
  ```
*/

import { _search, _summary, _article } from "agency-lang/stdlib-lib/wikipedia.js"

type WikiSearchResult = {
  title: string;
  description: string;
  excerpt: string
}

type WikiSummary = {
  title: string;
  description: string;
  extract: string;
  url: string
}

type WikiArticle = {
  title: string;
  text: string;
  url: string
}

effect std::wikipedia::search { query: string, limit: number }
effect std::wikipedia::summary { title: string }
effect std::wikipedia::article { title: string }

export def search(query: string, limit: number = 5): WikiSearchResult[] {
  """
  Search Wikipedia for articles matching a query. Each result has a title, description, and excerpt.

  @param query - The search query
  @param limit - Maximum number of results to return
  """
  return interrupt std::wikipedia::search("Are you sure you want to search Wikipedia?", {
    query: query,
    limit: limit
  })

  return _search(query, limit)
}

export def summary(title: string): WikiSummary {
  """
  Get a summary of a Wikipedia article. Returns the title, description, intro extract, and URL.

  @param title - The article title
  """
  return interrupt std::wikipedia::summary("Are you sure you want to fetch this Wikipedia article summary?", {
    title: title
  })

  return _summary(title)
}

export def article(title: string): WikiArticle {
  """
  Get the full text of a Wikipedia article. Returns the title, plain-text content, and URL.

  @param title - The article title
  """
  return interrupt std::wikipedia::article("Are you sure you want to fetch this Wikipedia article?", {
    title: title
  })

  return _article(title)
}
