'use strict';

const qu = require('../utils/qu');

async function scrapeAll(scenes) {
	return scenes.map(({ query }) => {
		const release = {
			director: 'Mike Adriano',
		};

		release.title = query.cnt('h3.title a, .content-title-wrap a');
		release.url = query.url('h3.title a, .content-title-wrap a');
		release.entryId = new URL(release.url).pathname.match(/\/view\/(\d+)/)[1];

		release.description = query.cnt('.desc, .content-description');
		release.date = query.date('.date, time, .hide', 'Do MMM YYYY');

		release.actors = query.cnts('h4.models a, .content-models a');
		release.duration = query.dur('.total-time');

		const [poster, ...primaryPhotos] = query.imgs('a img');
		const secondaryPhotos = query.styles('.thumb-top, .thumb-bottom, .thumb-mouseover', 'background-image').map(style => style.match(/url\((.*)\)/)[1]);

		release.poster = poster;
		release.photos = primaryPhotos.concat(secondaryPhotos);

		return release;
	});
}

function scrapeScene({ query }, url) {
	const release = { director: 'Mike Adriano' };

	if (query.exists('a[href*="stackpath.com"]')) {
		throw new Error('URL blocked by StackPath');
	}

	release.entryId = new URL(url).pathname.match(/\/view\/(\d+)/)[1];

	release.title = query.cnt('.content-page-info .title');
	release.description = query.cnt('.content-page-info .desc');
	release.date = query.date('.content-page-info .date, .content-page-info .hide', 'Do MMM YYYY');

	release.actors = query.cnts('.content-page-info .models a');
	release.duration = query.dur('.content-page-info .total-time:last-child');

	release.poster = query.poster('.content-page-header video, .content-page-header-inner video');

	const trailerEl = query.q('.content-page-header source, .content-page-header-inner source');

	if (trailerEl) {
		release.trailer = {
			src: trailerEl.src,
			type: trailerEl.type,
		};
	}

	return release;
}

async function fetchLatest(channel, page = 1) {
	const { host } = new URL(channel.url);
	const url = `https://tour.${host}/videos?page=${page}`;

	const res = await qu.get(url);

	if (res.ok) {
		if (res.item.query.exists('a[href*="stackpath.com"]')) {
			throw new Error('URL blocked by StackPath');
		}

		return scrapeAll(qu.initAll(res.item.el, '.content-item-large, .content-item, .content-border'), channel);
	}

	return res.status;
}

async function fetchScene(url, channel) {
	const res = await qu.get(url);

	if (res.ok) {
		return scrapeScene(res.item, url, channel);
	}

	return res.status;
}

/* API protected
async function fetchProfile(actorName, context , site) {
	const session = bhttp.session();

	await session.get(`https://tour.${site.slug}.com`);

	const url = `https://tour.${site.slug}.com/search-preview`;
	const res = await session.post(url, { q: actorName }, {
		headers: {
			'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
			origin: `https://tour.${site.slug}.com`,
		},
	});

	console.log(res.body.toString());
}
*/

module.exports = {
	fetchLatest,
	// fetchProfile,
	fetchScene,
};