import { AnimeNotifier } from "../AnimeNotifier"

// Save new data from an input field
export function save(arn: AnimeNotifier, input: HTMLElement) {
	let obj = {}
	let isContentEditable = input.isContentEditable
	let value = isContentEditable ? input.innerText : (input as HTMLInputElement).value
	
	if(value === undefined) {
		return
	}

	if((input as HTMLInputElement).type === "number" || input.dataset.type === "number") {
		if(input.getAttribute("step") === "1" || input.dataset.step === "1") {
			obj[input.dataset.field] = parseInt(value)
		} else {
			obj[input.dataset.field] = parseFloat(value)
		}
	} else {
		obj[input.dataset.field] = value
	}

	if(isContentEditable) {
		input.contentEditable = "false"
	} else {
		(input as HTMLInputElement).disabled = true
	}

	let apiEndpoint = arn.findAPIEndpoint(input)

	arn.post(apiEndpoint, obj)
	.catch(err => arn.statusMessage.showError(err))
	.then(() => {
		if(isContentEditable) {
			input.contentEditable = "true"
		} else {
			(input as HTMLInputElement).disabled = false
		}

		return arn.reloadContent()
	})
}

// Append new element to array
export function arrayAppend(arn: AnimeNotifier, element: HTMLElement) {
	let field = element.dataset.field
	let object = element.dataset.object || ""
	let apiEndpoint = arn.findAPIEndpoint(element)

	arn.post(apiEndpoint + "/field/" + field + "/append", object)
	.then(() => arn.reloadContent())
	.catch(err => arn.statusMessage.showError(err))
}

// Remove element from array
export function arrayRemove(arn: AnimeNotifier, element: HTMLElement) {
	if(!confirm("Are you sure you want to remove this element?")) {
		return
	}

	let field = element.dataset.field
	let index = element.dataset.index
	let apiEndpoint = arn.findAPIEndpoint(element)

	arn.post(apiEndpoint + "/field/" + field + "/remove/" + index, "")
	.then(() => arn.reloadContent())
	.catch(err => arn.statusMessage.showError(err))
}

// Increase episode
export function increaseEpisode(arn: AnimeNotifier, element: HTMLElement) {
	if(arn.isLoading) {
		return
	}

	let prev = element.previousSibling as HTMLElement
	let episodes = parseInt(prev.innerText)
	prev.innerText = String(episodes + 1)
	save(arn, prev)
}