import { htmlDocIsImageOnly } from '@joplin/renderer/htmlUtils';
import Logger from '@joplin/utils/Logger';

const logger = Logger.create('shouldPasteResources');

// We should only process the images if there is no plain text or HTML text in
// the clipboard. This is because certain applications, such as Word, are going
// to add multiple versions of the copied data to the clipboard - one with the
// text formatted as HTML, and one with the text as an image. In that case, we
// need to ignore the image and only process the HTML.
//
// Additional source of troubles is that when copying an image from Chrome, the
// clipboard will contain two elements: The actual image (type=image), and an
// HTML fragment with a link to the image. Most of the time getting the image
// from the HTML will work... except if some authentication is required to
// access the image. In that case we'll end up with dead link in the RTE. For
// that reason, when there's only an image in the HTML document, we process
// instead the clipboard resources, which will contain the actual image.
//
// We have a lot of log statements so that if someone reports a bug we can ask
// them to check the console and give us the messages they have. However, to avoid
// including sensitive information in the logs, users will need to check the console,
// not the log file.
export default (pastedText: string, pastedHtml: string, resourceMds: string[]) => {
	const debugInformation = JSON.stringify({ pastedText, pastedHtml, resourceMds }, undefined, '\t');
	logger.debug('Input data:', debugInformation);

	if (pastedText) {
		logger.info('Not pasting resources only because the clipboard contains plain text');
		return false;
	}

	if (pastedHtml) {
		if (!htmlDocIsImageOnly(pastedHtml)) {
			logger.info('Not pasting resources because the clipboard contains HTML, which contains more than just one image');
			return false;
		} else {
			logger.info('Not pasting HTML because it only contains one image.');
		}

		if (!resourceMds.length) {
			logger.info('Not pasting resources because there isn\'t any');
			return false;
		}
	}

	logger.info('Pasting resources');

	return true;
};
