import CollectionConfig from './CollectionConfig';

export class EYEDesmetFilmConfig extends CollectionConfig {

	constructor(clientId, user, collectionId, stats, info) {
		super(clientId, user, collectionId, stats, info);
	}

	getCollectionMediaTypes() {
		return ['video'];
	}

	getMetadataFieldCategories() {
		return [
			{
				'id' : 'titles',
				'label' : 'Titles',
				'fields' : [
					'Gegeven titel',
					'Originele titel',
					'Mogelijke titel',
					'Basement titel',
					'Basement engelse titel',
					'Basement engelse sorteertitel',
					'Basement sorteertitel',
					'Buitenlandse release-titel',
					'Vertaalde titel',
					'Voormalige titel EYE',
					'Alternatieve titel',
					'Tussentitels',
					'Nederlandse titel',
					'Verzameltitel amateurfilm',
					'Campagnetitel reclame',
					'Producttitel reclame',
					'Aanloopstrooktitel',
					'Soort en titel',
					'Serietitel',
					'Episodetitel',
					'Werktitel',
					'Bliktitel',
					'Kopietitel'
				]
			},
			{
				'id' : 'descriptions',
				'label' : 'Descriptions',
				'fields' : [
					'Lange beschrijving',
					'Korte beschrijving'
				]
			}
		]
	}

	getFacets() {
		return [
			{
				field: 'Acteur.keyword',
				title : 'Acteur',
				id : 'acteur',
				type : 'string'
			},
			{
				field: 'Productiemaatschappij.keyword',
				title : 'Productiemaatschappij',
				id : 'productiemaatschappij',
				type : 'string'
			}

		];
	}

	getItemDetailData(result, currentDateField) {
		result = this.formatSearchResult(result);
		const formattedResult = {}

		//then add the most basic top level data
		formattedResult.resourceId = result._id;
		formattedResult.index = result._index;
		formattedResult.docType = result._type;

		formattedResult.rawData = result;
		formattedResult.title = this.__getTitel(result);
		formattedResult.description = this.__getDescription(result);

		const dateInfo = this.__getDateInfo(result);
		if(dateInfo) {
			formattedResult.date = dateInfo.date;
			formattedResult.dateField = dateInfo.field;
		}

		formattedResult.posterURL = this.__getPoster(result);

		const content = this.__extractPlayableContent(result);
		if(content) {
			formattedResult.playableContent = content.playableContent;
			formattedResult.mediaTypes = content.mediaTypes;
		}
		formattedResult.externalSourceInfo = {
			url : null,
			message : "View in Eye's catalog: No direct link, use the \"ID\" to search in the EYE collectie catalogus: https://www.eyefilm.nl/eye-catalogus-zoek-in-de-collectie"
		}
		formattedResult.specialProperties = this.__getSpecialProperties(result);

		return formattedResult;
	}

	__getTitel(result) {
		if(result['Gegeven titel']) {
			return result['Gegeven titel'] + ' (given title)'
		} else if(result['Originele titel']) {
			return result['Originele titel'] + ' (original title)';
		} else if(result['Basement titel']) {
			return result['Basement titel'] + ' (basement title)';
		} else if(result['Nederlandse titel']) {
			return result['Nederlandse titel']  + ' (Dutch title)';
		}
		return 'Unknown'
	}

	__getDescription(result) {
		if(result['Korte beschrijving']) {
			return result['Korte beschrijving']
		} else if(result['Lange beschrijving']) {
			return result['Lange beschrijving'];
		} else if(result['Inhoudsbeschrijving']) {
			return result['Inhoudsbeschrijving'];
		}
		return null;
	}

	__getDateInfo(result) {
		if(result['Productiejaar']) {
			return {
				date : result['Productiejaar'],
				field : 'Productiejaar'
			};
		} else if(result['Releasedatum']) {
			return {
				date :result['Releasedatum'],
				field : 'Releasedatum'
			};
		}
		return null;
	}

	__getPoster(result) {
		if (result['Url_efg_thumb']) {
			return result['Url_efg_thumb'];
		}
		return null;
	}

	__extractPlayableContent(result) {
		if(result['Url_efg_2'])	 {
			let playableContent = null;
			if(result['Url_efg_2'].indexOf('youtu') != -1) {
				playableContent = [{
					url : result['Url_efg_2'],
					mimeType : 'video/mp4',
					assetId : result._id
				}]
			} else {
				//for the external Flash player
				//https://api.picturepipe.net/api/3.0/playouttoken/488ac87e22ae48e5856a9eb29158bd3f/play
				playableContent = [{
					url : result['Url_efg_2'],
					mimeType : 'application/javascript',
					assetId : result._id
				}]
			}
			return {
				playableContent : playableContent,
				mediaTypes : ['video']
			}

		}
		return null;
	}

	/*
	C02358: Marie a envie d'un chapeau [Frankrijk, 1913, 120x80, 00046]
	B02358: Marie a envie d'un chapeau [Frankrijk, 1913, 120x80, Sch 00090]
	A02358: Marie a envie d'un chapeau [Frankrijk, 1913, 120x80, 00041]
	*/
	__getSpecialProperties(result) {
		//?fr=0&sz=20&cids=eye-desmet-affiches&sf=&st=C05054&s=_score__desc&sl=eye-desmet-affiches
		const links = []
		if(result["Affiches"] && result["Affiches"] != '') {
			links.push(this.__parseAffiches(result['Affiches']));
		}

		if(result['Affiches (uit ander veld)']) {
			links.push(this.__parseAffiches(result['Affiches (uit ander veld)']));
		}
		return links.length > 0 ? {'Affiches' : links.join('\n\n') } : null;
	}

	__parseAffiches(a) {
		const affiches = [];
		const baseUrl = 'single-search?cids=eye-desmet-affiches&st='
		let tmp = a.split('\n');
		tmp.forEach((line) => {
			let tmp2 = line.split(':');
			if(tmp2.length > 1) {
				let url = baseUrl + tmp2[0];
				affiches.push('<a href="'+url+'" target="_affiche">' + tmp2[0] + '</a>' + tmp2[1]);
			}
		})
		return affiches.join('\n')
	}

}

export default EYEDesmetFilmConfig;