//左下のメッセージ
var todcTrigger = null
function todo(mes) {
	clearInterval(todcTrigger)
	$('#message').text(mes)
	$('#message').fadeIn()
	todcTrigger = setTimeout(todc, 4000)
}
function todc() {
	$('#message').fadeOut()
}
//reverse
function bottomReverse() {
	$('#bottom').toggleClass('reverse')
	$('.leftside').toggleClass('reverse')
	if ($('#bottom').hasClass('reverse')) {
		localStorage.removeItem('reverse')
	} else {
		localStorage.setItem('reverse', 'true')
	}
}
function tips(mode, custom) {
	postMessage(['sendSinmpleIpc', 'endmem'], '*')
	clearInterval(clockint)
	clearInterval(spotStart)
	if (mode == 'ver') {
		tipsToggle()
		$('#tips-text').html(
			'<img src="../../img/desk.png" width="20" onclick="todo(\'TheDesk is a nice client!: TheDesk ' +
				localStorage.getItem('ver') +
				' git: ' +
				gitHash +
				'\')"> ' +
				localStorage.getItem('ver') +
				' {' +
				gitHash.slice(0, 7) +
				'} [<i class="material-icons" style="font-size:1.2rem;top: 3px;position: relative;">supervisor_account</i><span id="persons">1+</span>]'
		)
		localStorage.setItem('tips', 'ver')
	} else if (mode == 'clock') {
		tipsToggle()
		localStorage.setItem('tips', 'clock')
		clock()
	} else if (mode == 'memory') {
		tipsToggle()
		localStorage.setItem('tips', 'memory')
		startmem()
	} else if (mode == 'trend') {
		tipsToggle()
		localStorage.setItem('tips', 'trend')
		trendTagonTip()
	} else if (mode == 'spotify') {
		tipsToggle()
		localStorage.setItem('tips', 'spotify')
		spotifytips()
	} else if (mode == 'itunes') {
		tipsToggle()
		localStorage.setItem('tips', 'itunes')
		itunestips()
	} else if (mode == 'custom') {
		tipsToggle()
		localStorage.setItem('tips', `custom:${custom}`)
		execPlugin(custom, 'tips', null)
	}
}
//メモリ
function startmem() {
	postMessage(['sendSinmpleIpc', 'startmem'], '*')
}
function renderMem(use, cpu, total, core, uptime) {
	let day = Math.floor(uptime / 60 / 60 / 24)
	let hour = Math.floor(uptime / 60 /60 % 24)
	if(hour < 10) hour = '0' + hour
	let min = Math.floor(uptime / 60 % 60)
	if(min < 10) min = '0' + min
	let sec = Math.floor(uptime % 60)
	if(sec < 10) sec = '0' + sec
	let time = `${day ? day + ' days ' : ''}${hour ? hour + ':' : ''}${min}:${sec}`
	//Intel
	cpu = cpu.replace('Intel(R)', '').replace('(TM)', '').replace(' CPU', '')
	//AMD
	cpu = cpu.replace('AMD ', '').replace(/\s[0-9]{1,3}-Core\sProcessor/, '')
	$('#tips-text').html(
		`${escapeHTML(cpu)} x ${core}<br />RAM: ${Math.floor(use / 1024 / 1024 / 102.4) / 10}/${Math.floor(total / 1024 / 1024 / 102.4) / 10}GB(${Math.floor((use / total) * 100)}%) UP:${time}`
	)
}
//トレンドタグ
function trendTagonTip() {
	$('.trendtag').remove()
	var domain = 'imastodon.net'
	var at = localStorage.getItem('acct_' + acct_id + '_at')
	var start = 'https://' + domain + '/api/v1/trend_tags'
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			Authorization: 'Bearer ' + at
		}
	})
		.then(function(response) {
			if (!response.ok) {
				response.text().then(function(text) {
					setLog(response.url, response.status, text)
				})
			}
			return response.json()
		})
		.catch(function(error) {
			todo(error)
			setLog(start, 'JSON', error)
			console.error(error)
		})
		.then(function(json) {
			if (json) {
				var tags = ''
				json = json.score
				Object.keys(json).forEach(function(tag) {
					tags =
						tags +
						`<a onclick="tagShow('${tag}', this)" class="pointer">
							#${escapeHTML(tag)}
						</a>
						<span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> 
							<a onclick="tagTL('tag','${tag}',false,'add')" class="pointer" title="#${tag}のタイムライン">TL</a> 
							<a onclick="show();brInsert('#${tag}')" class="pointer" title="#${tag}でトゥート">Toot</a>
						</span><br>`
				})
				$('#tips-text').html(
					'<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' +
						tags +
						'</div>'
				)
				trendTagonTipInterval()
			} else {
				$('#tips-text').html('')
			}
		})
}
//Spotify
spotint = null
function spotifytips() {
	if (spotint) clearInterval(spotint)
	var start = 'https://spotify.thedesk.top/current-playing?code=' + localStorage.getItem('spotify-token')
	var at = localStorage.getItem('spotify-token')
	if (at) {
		fetch(start, {
			method: 'GET',
			headers: {
				'content-type': 'application/json'
			}
		})
			.then(function(response) {
				if (!response.ok) {
					response.text().then(function(text) {
						setLog(response.url, response.status, text)
					})
				}
				return response.json()
			})
			.catch(function(error) {
				todo(error)
				setLog(start, 'JSON', error)
				console.error(error)
			})
			.then(function(jsonRaw) {
				var code = jsonRaw.token
				localStorage.setItem('spotify-token', code)
				var json = jsonRaw.data
				var ms = json.progress_ms
				if(!ms) {
					tips('ver')
					return false
				}
				var last = 1000 - (ms % 1000)
				var item = json.item
				var img = item.album.images[0].url
				var artisttxt = ''
				for (i = 0; i < item.artists.length; i++) {
					if (i > 0) {
						artisttxt = artisttxt + ',' + item.artists[i].name
					} else {
						artisttxt = item.artists[0].name
					}
				}
				artisttxt = escapeHTML(artisttxt)
				sleep(last)
				var tms = item.duration_ms
				var per = (ms / item.duration_ms) * 100
				ms = ms / 1000
				tms = tms / 1000
				var s = Math.round(ms) % 60
				if (s < 10) {
					s = '0' + s
				}
				var m = (Math.round(ms) - (Math.round(ms) % 60)) / 60
				var ts = Math.round(tms) % 60
				if (ts < 10) {
					ts = '0' + ts
				}
				var tm = (Math.round(tms) - (Math.round(tms) % 60)) / 60
				var html = `
				<div id="spot-box">
					<div id="spot-refresh">
						<i class="material-icons pointer" onclick="spotifytips()" style="font-size:20px">refresh</i>
						<i class="material-icons pointer" onclick="nowplaying('spotify');show()" style="font-size:20px">send</i>
					</div>
					<div id="spot-cover">
						<img src="${img}" id="spot-img" draggable="false">
					</div>
					<div id="spot-name">
						${escapeHTML(item.name)}
						<span class="gray sml" id="spot-art">${artisttxt}</span>
					</div>
					<div id="spot-time">
						<span id="spot-m">${m}</span>:<span id="spot-s">${s}</span>/${tm}:${ts}</span>
					</div>
					<div class="progress grey">
					<div class="determinate spotify-prog grey lighten-2"
					 style="width:${per}%" data-s="${Math.round(ms)}" data-total="${item.duration_ms}">
					</div>
				</div>
				</div>`
				$('#tips-text').html(html)
				spotint = setInterval(spotStart, 1000)
			})
	} else {
		Swal.fire({
			type: 'info',
			text: lang.lang_spotify_acct
		})
		tips('ver')
		return false
	}
}
function spotStart() {
	var total = $('.spotify-prog').attr('data-total')
	var s = $('.spotify-prog').attr('data-s')
	var news = s * 1 + 1
	var per = (news * 100000) / total
	var ns = news % 60
	var nm = (news - ns) / 60
	if (ns < 10) {
		ns = '0' + ns
	}
	if (per >= 100) {
		clearInterval(spotStart)
		spotifytips()
	} else {
		$('#spot-m').text(nm)
		$('#spot-s').text(ns)
	}
	$('.spotify-prog').attr('data-s', news)
	$('.spotify-prog').css('width', per + '%')
}
function trendTagonTipInterval() {
	setTimeout(trendTagonTip, 6000000)
}
//時計
var clockint
function clock() {
	var now = new Date()
	var last = 1000 - (now.getTime() % 1000)
	sleep(last)
	clockint = setInterval(clockStart, 1000)
}
function clockStart() {
	var nowTime = new Date() //  現在日時を得る
	var nowHour = nowTime.getHours() // 時を抜き出す
	if (nowHour < 10) {
		nowHour = '0' + nowHour
	}
	var nowMin = nowTime.getMinutes() // 分を抜き出す
	if (nowMin < 10) {
		nowMin = '0' + nowMin
	}
	var nowSec = nowTime.getSeconds() // 秒を抜き出す
	if (nowSec < 10) {
		nowSec = '0' + nowSec
	}
	var msg =
		nowTime.getFullYear() +
		'/' +
		(nowTime.getMonth() + 1) +
		'/' +
		nowTime.getDate() +
		'<span style="font-size:20px; font-family:Open Sans">' +
		nowHour +
		':' +
		nowMin +
		':' +
		nowSec +
		'</span>'
	$('#tips-text').html(msg)
}
function sleep(waitMsec) {
	var startMsec = new Date()
	while (new Date() - startMsec < waitMsec);
}
function tipsToggle() {
	$('#tips').toggleClass('hide')
	$('#tips-menu').toggleClass('hide')
}