<template>
	<div v-if="loading" class="loading">
	<p>Loading...</p>
	</div>
	<div v-else class="textnode">
		<!--pre>TextNode {{item}} {{typeof(item)}}</pre-->
		<div v-if="editorShow">
			<component v-bind:is="editorComponent" :editor="editor" v-model="currentText" :config="editorConfig"></component>
			<button v-on:click="saveText">Uložit</button>
			<button v-on:click="currentText = originalText;editorShow=!editorShow;">Zahodit úpravy</button>
		</div>
		<div v-else v-bind:class="changedObject">
			<p v-html="currentText"></p>
			<button v-on:click="editorShow=!editorShow">Upravit</button>
		</div>
	</div>
</template>

<script>
import axios from 'axios'

import ClassicEditor from '@ckeditor/ckeditor5-build-classic'
import CKEditor from '@ckeditor/ckeditor5-vue';

export default {
	name: 'TextNode',
	data: () => ({
		loading: false,
		editor: ClassicEditor,
		editorData: '<p>Content of the editor.</p>',
		editorConfig: {
			// The configuration of the editor.
		},
		editorShow: false,
		editorComponent: CKEditor.component,
		currentText: "",// this.item.node.text.na_web,
		originalText: "",// this.item.node.text.na_web,
	}),
	computed: {
		changedObject: function () {
			//console.log(this.currentText);
			//console.log(this.originalText);
			return {
				changed: this.currentText !== this.originalText,
				}
			}
	},
	props: {
		item: Object,
		editorShow: Boolean,
		create: Boolean,
		where: String,
		refnode: Object
	},
	mounted: function() {
		//console.log("mounted");
		if (this.create){
			this.currentText = "";
			this.originalText = "";
			this.editorShow = true;
		} else {
			this.currentText = this.item.node.text.na_web;
			this.originalText = this.item.node.text.na_web;

		}
		//this.getText();
	},
	methods: {
		getText: function() {
			this.loading = true;
			console.log(this.item);
			console.log(this.item.node.text);
			axios.get('/treenode/text/'+this.item.node.text)
			.then((response) => {
				this.text = response.data.na_web;
				this.loading = false;
			})
			.catch((err) => {
				this.loading = false;
				console.log(err);
				})
		},
		
		saveText: function() {
			console.log("Saving text");
			console.log(this.currentText);
			if (this.create){
				console.log(this.refnode);
				console.log(this.where);
				axios.post('/api/textnode/',{
					'text': { 'na_web': this.currentText},
					'refnode': this.refnode.id,
					'where': this.where
				}).then(response => {
					this.originalText = response.data.text.na_web;
					this.loading = false;
					this.$root.$emit('updateData',"textNode create update");
					})
				.catch(e => {
					this.errors.push(e)
				});
			} else {
				axios.put('/api/textnode/'+this.item.node.id+'/',{
					'text': { 'na_web': this.currentText},
					'id': this.item.node.id
				}).then(response => {
					this.originalText = response.data.text.na_web;
				})
				.catch(e => {
					this.errors.push(e)
				});
				
			}
			this.editorShow = false;
		},
	}
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.changed {
	background-color: 'yellow';
}
</style>