//トゥートの詳細
function details(id, acct_id, tlid, mode) {
	if (mode == "dm") {
		$(".dm-hide").hide();
	} else {
		$(".dm-hide").show();
	}
	$(".toot-reset").html('<span class="no-data">' + lang.lang_details_nodata + '</span>');
	var html = $("#timeline_" + tlid + " [toot-id=" + id + "]").html();
	$("#toot-this").html(html);
	$('#tootmodal').modal('open');
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		var start = "https://" + domain + "/api/notes/show";
		var i = {
			method: 'POST',
			headers: {
				'content-type': 'application/json',
			},
			body: JSON.stringify({
				i: at,
				noteId: id
			})
		}
	} else {
		var start = "https://" + domain + "/api/v1/statuses/" + id;
		var i = {
			method: 'GET',
			headers: {
				'content-type': 'application/json',
				'Authorization': 'Bearer ' + at
			},
		}
	}

	fetch(start, i).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		console.log(["Toot data:", json]);
		if (!$("#timeline_" + tlid + " #pub_" + id).length) {
			var html = parse([json], '', acct_id);
			$("#toot-this").html(html);
			jQuery("time.timeago").timeago();
		}
		if (localStorage.getItem("mode_" + domain) == "misskey") {
			var url = "https://" + domain + "/notes/" + json.id;
			var scn = json.user.username;
			if (!json.user.host) {
				var local = true;
			} else {
				var local = false;
				scn = scn + "@" + host;
			}
			var rep = "";
			var uid = json.user.id;
			if (json._replyIds) {
				replyTL(json._replyIds[0], acct_id);
			}
		} else {
			var url = json.url
			if (json.account.acct == json.account.username) {
				var local = true;
			} else {
				var local = false;
			}
			var scn = json.account.acct;
			var uid = json.account.id;
			if (json["in_reply_to_id"]) {
				replyTL(json["in_reply_to_id"], acct_id);
			}
		}
		$("#toot-this .fav_ct").text(json.favourites_count);
		$("#toot-this .rt_ct").text(json.reblogs_count);
		$("#tootmodal").attr("data-url", url);
		$("#tootmodal").attr("data-id", json.id);
		if (local) {
			$("#tootmodal").attr("data-user", scn + "@" + domain);
		} else {
			$("#tootmodal").attr("data-user", scn);
		}
		getContext(id, acct_id);
		var dom = null;
		if (!local) {
			dom = scn.replace(/.+@/g, '');
		} else {
			dom = domain;
		}
		beforeToot(id, acct_id, dom);
		userToot(id, acct_id, uid);
		afterToot(id, acct_id, dom);
		afterUserToot(id, acct_id, uid);
		afterFTLToot(id, acct_id, dom);
		faved(id, acct_id);
		rted(id, acct_id);
		if ($("#toot-this div").hasClass("cvo")) {
			$("#toot-this").removeClass("cvo");
		} else {
			if(!$("#toot-this .cvo").hasClass("cvo")){
				$("#toot-this").addClass("cvo");
			}
		}
		if (!$("#activator").hasClass("active")) {
			$('#det-col').collapsible('open', 4);
		}

	});
}

//返信タイムライン
function replyTL(id, acct_id) {
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		var start = "https://" + domain + "/api/notes/show";
		var i = {
			method: 'POST',
			headers: {
				'content-type': 'application/json',
			},
			body: JSON.stringify({
				i: at,
				noteId: id
			})
		}
	} else {
		return false
	}
	fetch(start, i).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		if (localStorage.getItem("filter_" + acct_id) != "undefined") {
			var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "thread");
		} else {
			var mute = [];
		}
		if (localStorage.getItem("mode_" + domain) == "misskey") {
			var templete = misskeyParse([json], '', acct_id, "", "", mute);
			$("#toot-after").prepend(templete);
			$("#toot-after .hide").html(lang.lang_details_filtered);
			$("#toot-after .by_filter").css("display", "block");
			$("#toot-after .by_filter").removeClass("hide");
			var rep = "_replyIds";
			if (json[rep]) {
				replyTL(json[rep][0], acct_id);
			}
		}

	});
}

//コンテクストってなんですか
function getContext(id, acct_id) {
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		var start = "https://" + domain + "/api/notes/conversation";
		var i = {
			method: 'POST',
			headers: {
				'content-type': 'application/json',
			},
			body: JSON.stringify({
				i: at,
				noteId: id
			})
		}
	} else {
		var start = "https://" + domain + "/api/v1/statuses/" + id + "/context";
		var i = {
			method: 'GET',
			headers: {
				'content-type': 'application/json',
				'Authorization': 'Bearer ' + at
			},
		}
	}
	fetch(start, i).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		if (localStorage.getItem("mode_" + domain) == "misskey") {
			json.reverse();
			var templete = misskeyParse(json, '', acct_id, "", "", []);
			$("#toot-reply").html(templete);
			$("#toot-reply .hide").html(lang.lang_details_filtered);
			$("#toot-reply .by_filter").css("display", "block");
			$("#toot-reply .by_filter").removeClass("hide");
			jQuery("time.timeago").timeago();
		} else {
			if (localStorage.getItem("filter_" + acct_id) != "undefined") {
				var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "thread");
			} else {
				var mute = [];
			}
			var templete = parse(json.descendants, '', acct_id, "", "", mute);
			if (templete != "") {
				$("#toot-after .no-data").hide();
			}
			$("#toot-after").html(templete);
			$("#toot-after .hide").html(lang.lang_details_filtered);
			$("#toot-after .by_filter").css("display", "block");
			$("#toot-after .by_filter").removeClass("hide");
			var templete = parse(json.ancestors, '', acct_id, "", "", mute);
			if (templete != "") {
				$("#toot-reply .no-data").hide();
			}
			$("#toot-reply").prepend(templete);
			$("#toot-reply .hide").html(lang.lang_details_filtered);
			$("#toot-reply .by_filter").css("display", "block");
			$("#toot-reply .by_filter").removeClass("hide");
			jQuery("time.timeago").timeago();
		}

	});
}

//前のトゥート(Back TL)
function beforeToot(id, acct_id, domain) {
	//var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		var start = "https://" + domain +
			"/api/notes/local-timeline"
		fetch(start, {
			method: 'POST',
			headers: {
				'content-type': 'application/json',
			},
			body: JSON.stringify({
				i: at,
				untilID: id
			})
		}).then(function (response) {
			return response.json();
		}).catch(function (error) {
			todo(error);
			console.error(error);
		}).then(function (json) {
			var templete = misskeyParse(json, 'noauth', acct_id);
			$("#toot-before").html(templete);
			jQuery("time.timeago").timeago();
		});
	} else {
		var start = "https://" + domain +
			"/api/v1/timelines/public?local=true&max_id=" + id;
		fetch(start, {
			method: 'GET',
			headers: {
				'content-type': 'application/json',
			},
		}).then(function (response) {
			return response.json();
		}).catch(function (error) {
			todo(error);
			console.error(error);
		}).then(function (json) {
			var templete = parse(json, 'noauth', acct_id);
			if (templete != "") {
				$("#toot-before .no-data").hide();
			}
			$("#toot-before").html(templete);
			jQuery("time.timeago").timeago();
		});
	}
}
//前のユーザーのトゥート
function userToot(id, acct_id, user) {
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		var start = "https://" + domain +
			"/api/users/notes"
		fetch(start, {
			method: 'POST',
			headers: {
				'content-type': 'application/json',
			},
			body: JSON.stringify({
				i: at,
				untilID: id,
				userId: user
			})
		}).then(function (response) {
			return response.json();
		}).catch(function (error) {
			todo(error);
			console.error(error);
		}).then(function (json) {
			var templete = misskeyParse(json, 'noauth', acct_id);
			$("#user-before").html(templete);
			jQuery("time.timeago").timeago();
		});
	} else {
		var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?max_id=" + id;
		fetch(start, {
			method: 'GET',
			headers: {
				'content-type': 'application/json',
				'Authorization': 'Bearer ' + at
			},
		}).then(function (response) {
			return response.json();
		}).catch(function (error) {
			todo(error);
			console.error(error);
		}).then(function (json) {
			var templete = parse(json, '', acct_id);
			if (templete != "") {
				$("#user-before .no-data").hide();
			}
			$("#user-before").html(templete);
			jQuery("time.timeago").timeago();
		});
	}

}
//後のLTL
function afterToot(id, acct_id, domain) {
	//var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain +
		"/api/v1/timelines/public?local=true&min_id=" + id;
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
		},
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		var templete = parse(json, 'noauth', acct_id);
		if (templete != "") {
			$("#ltl-after .no-data").hide();
		}
		$("#ltl-after").html(templete);
		jQuery("time.timeago").timeago();
	});
}
//後のUTL
function afterUserToot(id, acct_id, user) {
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/accounts/" + user + "/statuses?min_id=" + id;
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			'Authorization': 'Bearer ' + at
		},
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		var templete = parse(json, '', acct_id);
		if (templete != "") {
			$("#user-after .no-data").hide();
		}
		$("#user-after").html(templete);
		jQuery("time.timeago").timeago();
	});
}
//後のFTL
function afterFTLToot(id, acct_id, domain) {
	//var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain +
		"/api/v1/timelines/public?min_id=" + id;
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
		},
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		var templete = parse(json, 'noauth', acct_id);
		if (templete != "") {
			$("#ftl-after .no-data").hide();
		}
		$("#ftl-after").html(templete);
		jQuery("time.timeago").timeago();
	});
}

//ふぁぼ一覧
function faved(id, acct_id) {
	var domain = localStorage.getItem("domain_" + acct_id);
	if (localStorage.getItem("mode_" + domain) == "misskey") { return false; }
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/statuses/" + id + "/favourited_by";
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			'Authorization': 'Bearer ' + at
		},
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		var templete = userparse(json, '', acct_id);
		if (templete != "") {
			$("#toot-fav .no-data").hide();
		}
		$("#toot-fav").html(templete);
		jQuery("time.timeago").timeago();
	});
}

//ブースト一覧
function rted(id, acct_id) {
	var domain = localStorage.getItem("domain_" + acct_id);
	if (localStorage.getItem("mode_" + domain) == "misskey") { return false; }
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/statuses/" + id + "/reblogged_by";
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			'Authorization': 'Bearer ' + at
		},
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		var templete = userparse(json, '', acct_id);
		$("#toot-rt").html(templete);
		jQuery("time.timeago").timeago();
	});
}
//URL等のコピー
function cbCopy(mode) {
	var url = $("#tootmodal").attr("data-url");
	var urls = url.match(/https?:\/\/([-.a-zA-Z0-9]+)/);
	var domain = urls[1];
	if (mode == "emb") {
		var emb = '<iframe src="' + url + '/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400"></iframe><script src="https://' + domain + '/embed.js" async="async"></script>';
		execCopy(emb)
		M.toast({ html: lang.lang_details_embed, displayLength: 1500 })
	} else {
		if (execCopy(url)) {
			M.toast({ html: lang.lang_details_url, displayLength: 1500 })
		}

	}
}
//本文のコピー
function staCopy(id) {
	var html = $("[toot-id=" + id + "] .toot").html();
	html = html.replace(/^<p>(.+)<\/p>$/, "$1");
	html = html.replace(/<br\s?\/?>/, "\n");
	html = html.replace(/<p>/, "\n");
	html = html.replace(/<\/p>/, "\n");
	console.log("Copy it:\n" + html);
	html = html.replace(/<img[\s\S]*alt="(.+?)"[\s\S]*?>/g, "$1");
	html = $.strip_tags(html);
	if (execCopy(html)) {
		M.toast({ html: lang.lang_details_txt, displayLength: 1500 })
	}

}
//翻訳
function trans(tar, to) {
	var html = $("#toot-this .toot").html();
	if (html.match(/^<p>(.+)<\/p>$/)) {
		html = html.match(/^<p>(.+)<\/p>$/)[1];
	}
	html = html.replace(/<br\s?\/?>/g, "\n");
	html = html.replace(/<p>/g, "\n");
	html = html.replace(/<\/p>/g, "\n");
	html = $.strip_tags(html);
	if (~tar.indexOf("zh")) {
		tar = "zh";
	}
	$("#toot-this .additional").text("Loading...(Powered by Google Translate)");
	var exec = 'https://script.google.com/macros/s/AKfycbxhwW5tjjop9Irg-y1zr_WsXlCKEzwWG6KuoOt_vVRDfEbRv0c/exec?format=json&text=' + encodeURIComponent(html) + '&source=' + tar + '&target=' + to
	console.log("Try to translate from " + tar + " to " + to + " at " + exec);
	fetch(exec, {
		method: 'GET',
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (text) {
		$("#toot-this .additional").html('<span class="gray translate">' + text.text + '</span>');
	});
}
//ブラウザで開く
function brws() {
	var url = $("#tootmodal").attr("data-url");
	postMessage(["openUrl", url], "*")
}
//外部からトゥート開く
function detEx(url, acct_id) {
	if (acct_id == "main") {
		acct_id = localStorage.getItem("main");
	}
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/search?resolve=true&q=" + url
	fetch(start, {
		method: 'GET',
		headers: {
			'content-type': 'application/json',
			'Authorization': 'Bearer ' + at
		}
	}).then(function (response) {
		return response.json();
	}).catch(function (error) {
		todo(error);
		console.error(error);
	}).then(function (json) {
		if (!json.statuses) {
			postMessage(["openUrl", url], "*")
		} else {
			var id = json.statuses[0].id;
			$(".loadp").text($(".loadp").attr("href"));
			$(".loadp").removeClass("loadp");
			details(id, acct_id, 0)
		}

	});
	return;
}