/**
 * Remove placements → widgets → templates for a CB AI Product Assistant widget by name.
 * Order matches BigCommerce constraints (placements reference widgets).
 */
export type PurgeProductAssistantResult = {
	placementsDeleted: number;
	widgetsDeleted: number;
	templatesDeleted: number;
};

export async function purgeBigCommerceProductAssistantWidget(
	bigCommerce: any,
	names: { templateName: string; widgetName: string }
): Promise<PurgeProductAssistantResult> {
	let placementsDeleted = 0;
	let widgetsDeleted = 0;
	let templatesDeleted = 0;

	try {
		const widgetsResponse = await bigCommerce.get('/content/widgets');
		const existingWidgets = (widgetsResponse?.data || []).filter((w: any) => w.name === names.widgetName);

		for (const widget of existingWidgets) {
			try {
				const placementsResponse = await bigCommerce.get('/content/placements');
				const related = (placementsResponse?.data || []).filter((p: any) => p.widget_uuid === widget.uuid);
				for (const placement of related) {
					try {
						await bigCommerce.delete(`/content/placements/${placement.uuid}`);
						placementsDeleted += 1;
					} catch (e) {
						console.warn('[purgeBigCommerceProductAssistantWidget] Placement delete failed:', placement.uuid, e);
					}
				}
			} catch (e) {
				console.warn('[purgeBigCommerceProductAssistantWidget] Could not list placements:', e);
			}

			try {
				await bigCommerce.delete(`/content/widgets/${widget.uuid}`);
				widgetsDeleted += 1;
			} catch (e) {
				console.warn('[purgeBigCommerceProductAssistantWidget] Widget delete failed:', widget.uuid, e);
			}
		}
	} catch (e) {
		console.error('[purgeBigCommerceProductAssistantWidget] Error fetching widgets:', e);
	}

	try {
		const templatesResponse = await bigCommerce.get('/content/widget-templates');
		const existingTemplates = (templatesResponse?.data || []).filter((t: any) => t.name === names.templateName);
		for (const template of existingTemplates) {
			try {
				await bigCommerce.delete(`/content/widget-templates/${template.uuid}`);
				templatesDeleted += 1;
			} catch (e) {
				console.warn('[purgeBigCommerceProductAssistantWidget] Template delete failed:', template.uuid, e);
			}
		}
	} catch (e) {
		console.error('[purgeBigCommerceProductAssistantWidget] Error fetching templates:', e);
	}

	return { placementsDeleted, widgetsDeleted, templatesDeleted };
}
