import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { dumplingAuth } from '../auth';

export const searchNews = createAction({
	name: 'search_news',
	auth: dumplingAuth,
	displayName: 'Search News',
	description: 'Search for news articles using Google News.',
	audience: 'both',
	aiMetadata: { description: 'Searches Google News via Dumpling AI for a query, with optional country/location/language and date-range filtering plus pagination. Choose this over the general web search when the agent needs news articles specifically. Not idempotent: each call is a fresh billed search reflecting live news at request time.', idempotent: false },
	props: {
		query: Property.ShortText({
			displayName: 'Search Query',
			required: true,
			description: 'The search query for Google News.',
		}),
		country: Property.ShortText({
			displayName: 'Country',
			required: false,
			description: 'Country code for location bias (e.g., "US" for United States).',
		}),
		location: Property.ShortText({
			displayName: 'Location',
			required: false,
			description: 'Specific location to focus the search (e.g., "New York, NY").',
		}),
		language: Property.ShortText({
			displayName: 'Language',
			required: false,
			description: 'Language code for the search results (e.g., "en" for English).',
		}),
		dateRange: Property.StaticDropdown({
			displayName: 'Date Range',
			required: false,
			options: {
				options: [
					{ label: 'Any Time', value: 'anyTime' },
					{ label: 'Past Hour', value: 'pastHour' },
					{ label: 'Past Day', value: 'pastDay' },
					{ label: 'Past Week', value: 'pastWeek' },
					{ label: 'Past Month', value: 'pastMonth' },
					{ label: 'Past Year', value: 'pastYear' },
				],
			},
			description: 'Filter results by date.',
		}),
		page: Property.Number({
			displayName: 'Page Number',
			required: false,
			description: 'Page number for paginated results.',
		}),
	},
	async run(context) {
		const { query, country, location, language, dateRange, page } = context.propsValue;

		const requestBody: Record<string, any> = {
			query,
		};

		// Add optional parameters if provided
		if (country) requestBody['country'] = country;
		if (location) requestBody['location'] = location;
		if (language) requestBody['language'] = language;
		if (dateRange) requestBody['dateRange'] = dateRange;
		if (page) requestBody['page'] = page;

		const response = await httpClient.sendRequest({
			method: HttpMethod.POST,
			url: 'https://app.dumplingai.com/api/v1/search-news',
			headers: {
				'Content-Type': 'application/json',
				Authorization: `Bearer ${context.auth.secret_text}`,
			},
			body: requestBody,
		});

		return response.body;
	},
});
