<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
import { AI_HOST, INSIGHTS_HOST } from '@constants';
import { reqDataBasics } from '@shared/lib/data';
import { useImageGenerationStore } from '@shared/state/generate-images';
import apiFetch from '@wordpress/api-fetch';
import { __ } from '@wordpress/i18n';

export const generateImage = async (imageData, signal) => {
	const response = await fetch(`${AI_HOST}/api/draft/image`, {
		method: 'POST',
		mode: 'cors',
		headers: { 'Content-Type': 'application/json' },
		signal: signal,
		body: JSON.stringify({
			...imageData,
			globalState: useImageGenerationStore.getState(),
			...reqDataBasics,
		}),
	});

	const body = await response.json();

	const imageCredits = {
		remaining: response.headers.get('x-ratelimit-remaining'),
		total: response.headers.get('x-ratelimit-limit'),
		refresh: response.headers.get('x-ratelimit-reset'),
	};

	if (!response.ok) {
		if (body.status && body.status === 'content-policy-violation') {
			throw {
				message: __(
					'Your request was rejected as a result of our safety system. Your prompt may contain text that is not allowed by our safety system.',
					'extendify-local',
				),
				imageCredits,
			};
		}
		throw {
			message: __('Service temporarily unavailable', 'extendify-local'),
			imageCredits,
		};
	}
	return {
		images: body,
		imageCredits,
		id: response.headers.get('x-request-id'),
	};
};

export const recordPluginActivity = async ({ slug, source }) => {
	try {
		const res = await fetch(`${INSIGHTS_HOST}/api/v1/plugin-install`, {
			method: 'POST',
			headers: { 'Content-Type': 'application/json', 'X-Extendify': 'true' },
			body: JSON.stringify({
				...reqDataBasics,
				slug,
				source,
				siteCreatedAt: window.extSharedData?.siteCreatedAt,
			}),
		});

		// this should not break the app.
		if (!res.ok) {
			console.error('Bad response from server');
			return null;
		}

		return await res.json();
	} catch (error) {
		console.error('Error sending plugin installation notification:', error);
		return null;
	}
};

export const pingServer = async () =>
	await apiFetch({ path: '/extendify/v1/shared/ping' });

export const getPartnerPlugins = async (key) => {
	const plugins = await apiFetch({
		path: '/extendify/v1/shared/partner-plugins',
	});
	if (!Object.keys(plugins?.data ?? {}).length) {
		throw new Error('Could not get plugins');
	}
	if (key && plugins.data?.[key]) {
		return plugins.data[key];
	}
	return plugins.data;
};
