import { searchNews, SafeSearchType } from 'duck-duck-scrape';
import { delay } from '@fastgpt/global/common/system/utils';
import { addLog } from '@fastgpt/service/common/system/log';

type Props = {
  query: string;
};

// Response type same as HTTP outputs
type Response = Promise<{
  result: string;
}>;

const main = async (props: Props, retry = 3): Response => {
  const { query } = props;

  try {
    const searchResults = await searchNews(query, {
      safeSearch: SafeSearchType.STRICT
    });

    const result = searchResults.results
      .map((item) => ({
        title: item.title,
        excerpt: item.excerpt,
        url: item.url
      }))
      .slice(0, 10);

    return {
      result: JSON.stringify(result)
    };
  } catch (error) {
    if (retry <= 0) {
      addLog.warn('DuckDuckGo error', { error });
      return {
        result: 'Failed to fetch data'
      };
    }

    await delay(Math.random() * 5000);
    return main(props, retry - 1);
  }
};

export default main;
