/*--- IMPORTS ---*/
import express               from 'express';
import axios, { AxiosError } from 'axios';
import { JSDOM }             from 'jsdom';
/*--- VARIABLES ---*/
const router = express.Router();
router.post( '/scrapper/', async( request, response ) => {
	const websiteUrl       = request.body.url || '';
	const websiteSelectors = request.body.selectors || '';
	await axios
	.get( websiteUrl )
	.then( ( res ) => {
		const HTMLData = res.data;
		const dom      = new JSDOM( HTMLData );
		response.status( 200 ).send( extractData( dom.window.document, websiteSelectors, websiteUrl ) );
	} )
	.catch( ( error ) => {
		console.log( error );
		console.error( `There was an error with ${ websiteUrl }.` );
		response.status( 500 ).send( error );
	} );
} );
const extractData = ( document: Document, selectors: string, websiteUrl: string ) => {
	const HTMLLinks: HTMLAnchorElement[] = Array.from(
		document.querySelectorAll( selectors ),
	);
	const extractedLinks                 = HTMLLinks.map( link => {
		return {
			title: link.text,
			url:   link.href,
		};
	} );
	return {
		'request-url':      websiteUrl,
		'request-selector': selectors,
		'result-length':    (JSON.stringify( extractedLinks ).length / 1024).toLocaleString('en-US', {minimumFractionDigits: 4, maximumFractionDigits: 4}) + ' KBytes',
		'result-links':     extractedLinks,
	};
};
export default router;