//ユーザーデータ表示
localStorage.removeItem("history");
//コード受信
if (location.search) {
	var m = location.search.match(/\?mode=([a-zA-Z-0-9]+)\&code=(.+)/);
	var mode = m[1];
	var codex = m[2];
	if (mode == "user") {
		udgEx(codex, "main");
	}
}
function udgEx(user, acct_id) {
	if (user == "selector") {
		user = $("#his-acct").attr("fullname");
	}
	if (acct_id == "selector") {
		acct_id = $("#user-acct-sel").val();
	}
	if (acct_id == "main") {
		acct_id = localStorage.getItem("main");
	}
	console.log("Get user data of " + user);
	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/v2/search?resolve=true&q=" + encodeURIComponent(user);
	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.accounts[0]) {
				var id = json.accounts[0].id;
				udg(id, acct_id);
			} else {
				postMessage(["openUrl", user], "*");
			}
		});
	return true;
}
function udg(user, acct_id) {
	reset();
	if (!user) {
		user = localStorage.getItem("user-id_" + acct_id);
	}
	todo("User Data Loading...");
	var domain = localStorage.getItem("domain_" + acct_id);
	if (localStorage.getItem("mode_" + domain) == "misskey") {
		misskeyUdg(user, acct_id);
		return;
	}
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/accounts/" + user;
	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 (!localStorage.getItem("history")) {
				$("#his-history-btn").prop("disabled", true);
			} else {
				$("#his-history-btn").prop("disabled", false);
				$("#his-data").attr("history", localStorage.getItem("history"));
			}
			//moved設定時
			if (json.moved) {
				M.toast({
					html: lang.lang_showontl_movetxt + '<button class="btn-flat toast-action" onclick="udg(\'' + json.moved.id + "','" + acct_id + "')\">" + lang.lang_showontl_movebtn + "</button>",
					displayLength: 4000
				});
			}
			$("#his-data").modal("open");
			$("#his-data").attr("user-id", user);
			$("#his-data").attr("use-acct", acct_id);
			if (json.username != json.acct) {
				//Remote
				$("#his-data").attr("remote", "true");
				var fullname = json.acct;
			} else {
				$("#his-data").attr("remote", "false");
				var fullname = json.acct + "@" + domain;
			}
			utlShow(json.id, "", acct_id);
			flw(json.id, "", acct_id);
			fer(json.id, "", acct_id);
			var dis_name = escapeHTML(json.display_name);
			dis_name = twemoji.parse(dis_name);

			var note = json.note;
			if (json.emojis) {
				var actemojick = json.emojis[0];
			} else {
				var actemojick = false;
			}
			//絵文字があれば
			if (actemojick) {
				Object.keys(json.emojis).forEach(function(key5) {
					var emoji = json.emojis[key5];
					var shortcode = emoji.shortcode;
					var emoji_url = '<img src="' + emoji.url + '" class="emoji-img" data-emoji="' + shortcode + '" draggable="false">';
					var regExp = new RegExp(":" + shortcode + ":", "g");
					dis_name = dis_name.replace(regExp, emoji_url);
					note = note.replace(regExp, emoji_url);
				});
			}
			//noteの解析
			//var tags =  '<a onclick="tl(\'tag\',\'$1\',' + acct_id +',\'add\')" class="pointer parsed">#$1</a>';
			//var mens =  '<a onclick="udgEx(\'$1\',' + acct_id +')" class="pointer parsed">@$1</a>';
			//note=note.replace(/#(\S+)/gi, tags)
			//note=note.replace(/\s@([a-zA-Z_0-9@.-]+)/gi, mens)
			$("#his-name").html(dis_name);
			$("#his-acct").text(json.acct);
			$("#his-acct").attr("fullname", fullname);
			$("#his-prof").attr("src", json.avatar);
			$("#his-data").css("background-image", "url(" + json.header + ")");
			$("#his-sta").text(json.statuses_count);
			$("#his-follow").text(json.following_count);
			var flerc = json.followers_count;
			if (flerc < 0) {
				flerc = "-";
			}
			$("#his-follower").text(flerc);
			$("#his-since").text(crat(json.created_at));
			$("#his-openin").attr("data-href", json.url);
			if (json.fields) {
				var table = "";
				if (json.fields.length > 0) {
					$("#his-des").css("max-height", "250px");
					table = '<table id="his-field">';
					for (var i = 0; i < json.fields.length; i++) {
						var fname = json.fields[i].name;
						var fval = json.fields[i].value;
						if (json.fields[i].verified_at) {
							var when = lang.lang_showontl_verified + ":" + crat(json.fields[i].verified_at);
							var color = "rgba(121,189,154,.25);";
						} else {
							var when = "";
							var color = "inherit";
						}
						table = table + '<tr><td class="his-field-title">' + escapeHTML(fname) + '</td><td class="his-field-content" title="' + when + '" style="background-color:' + color + '">' + fval + "</td></tr>";
					}
					table = table + "</table>";
					$("#his-des").html(twemoji.parse(note));
				} else {
					$("#his-des").css("max-height", "400px");
				}
				$("#his-table").html(twemoji.parse(table));
			} else {
				$("#his-des").css("max-height", "400px");
			}
			$("#his-des").html(twemoji.parse(note));
			if (json.bot) {
				$("#his-bot").html(lang.lang_showontl_botacct);
			}
			$("#his-des").attr("data-acct", acct_id);
			$("#his-data").css("background-size", "cover");
			$("#his-float-timeline").css("height", $("#his-data-show").height() + "px");
			localStorage.setItem("history", user);
			//自分の時
			if (json.acct == localStorage.getItem("user_" + acct_id)) {
				showFav("", acct_id);
				showBlo("", acct_id);
				showMut("", acct_id);
				showDom("", acct_id);
				showReq("", acct_id);
				showFrl("", acct_id);
				$("#his-name-val").val(json.display_name);
				if (json.fields.length > 0) {
					if (json.fields[0]) {
						$("#his-f1-name").val(json.fields[0].name);
						$("#his-f1-val").val($.strip_tags(json.fields[0].value));
					}
					if (json.fields[1]) {
						$("#his-f2-name").val(json.fields[1].name);
						$("#his-f2-val").val($.strip_tags(json.fields[1].value));
					}
					if (json.fields[2]) {
						$("#his-f3-name").val(json.fields[2].name);
						$("#his-f3-val").val($.strip_tags(json.fields[2].value));
					}
					if (json.fields[3]) {
						$("#his-f4-name").val(json.fields[3].name);
						$("#his-f4-val").val($.strip_tags(json.fields[3].value));
					}
				}
				var des = json.note;
				des = des.replace(/<br \/>/g, "\n");
				des = $.strip_tags(des);
				$("#his-des-val").val(des);
				$("#his-follow-btn").hide();
				$("#his-block-btn").hide();
				$("#his-mute-btn").hide();
				$("#his-notf-btn").hide();
				$("#his-domain-btn").hide();
				$("#his-emp-btn").hide();
				$(".only-my-data").show();
				$(".only-his-data").hide();
				if (localStorage.getItem("main") == acct_id) {
					$("#his-main-acct").hide();
				}
			} else {
				relations(user, acct_id);
				$(".only-my-data").hide();
				$(".only-his-data").show();
			}
			todc();
			if(json.locked) {
				$('#his-data').addClass('locked')
			} else {
				$('#his-data').removeClass('locked')
			}
			//外部データ取得(死かもしれないので)
			udAdd(acct_id, user, json.url);
		});
}
function misskeyUdg(user, acct_id) {
	reset();
	if (!user) {
		user = localStorage.getItem("user-id_" + acct_id);
	}
	todo("User Data Loading...");
	var domain = localStorage.getItem("domain_" + acct_id);
	if (localStorage.getItem("mode_" + domain) != "misskey") {
		udg(user, acct_id);
		return;
	}
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/users/show";
	fetch(start, {
		method: "POST",
		headers: {
			"content-type": "application/json"
		},
		body: JSON.stringify({
			i: at,
			userId: user
		})
	})
		.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 (!localStorage.getItem("history")) {
				$("#his-history-btn").prop("disabled", true);
			} else {
				$("#his-history-btn").prop("disabled", false);
				$("#his-data").attr("history", localStorage.getItem("history"));
			}
			$("#his-data").modal("open");
			$("#his-data").attr("user-id", user);
			$("#his-data").attr("use-acct", acct_id);
			if (json.host) {
				//Remote
				$("#his-data").attr("remote", "false");
				var fullname = json.username + "@" + json.host;
			} else {
				$("#his-data").attr("remote", "false");
				var fullname = json.acct + "@" + domain;
			}
			utlShow(json.id, "", acct_id);
			flw(json.id, "", acct_id);
			fer(json.id, "", acct_id);
			if (json.name) {
				var dis_name = escapeHTML(json.name);
				dis_name = twemoji.parse(dis_name);
			} else {
				var dis_name = json.name;
			}
			$("#his-name").html(dis_name);
			$("#his-acct").text(json.username);
			$("#his-acct").attr("fullname", fullname);
			$("#his-prof").attr("src", json.avatarUrl);
			$("#his-data").css("background-image", "url(" + json.bannerUrl + ")");
			$("#his-sta").text(json.notesCount);
			$("#his-follow").text(json.followingCount);
			$("#his-follower").text(json.followersCount);
			$("#his-since").text(crat(json.createdAt));
			var note = escapeHTML(json.description);
			$("#his-des").html(twemoji.parse(note));
			if (json.isCat) {
				$("#his-bot").html("Cat" + twemoji.parse("😺"));
			}
			$("#his-data").css("background-size", "cover");
			localStorage.setItem("history", user);
			//自分の時
			if (json.username == localStorage.getItem("user_" + acct_id) && !json.host) {
				//showFav('', acct_id);
				//showMut('', acct_id);
				//showReq('', acct_id);
				showFrl("", acct_id);
				$("#his-name-val").val(json.name);
				var des = json.note;
				des = nl2br(des);
				des = $.strip_tags(des);
				$("#his-des-val").val(des);
				$("#his-follow-btn").hide();
				$("#his-block-btn").hide();
				$("#his-mute-btn").hide();
				$("#his-notf-btn").hide();
				$("#his-domain-btn").hide();
				$("#his-emp-btn").hide();
				$(".only-my-data").show();
				$(".only-his-data").hide();
				if (localStorage.getItem("main") == acct_id) {
					$("#his-main-acct").hide();
				}
			} else {
				if (json.isFollowing) {
					//自分がフォローしている
					$("#his-data").addClass("following");
					$("#his-follow-btn-text").text(lang.lang_status_unfollow);
					hisList(user, acct_id);
				} else {
					$("#his-follow-btn-text").text(lang.lang_status_follow);
				}
				if (json.isFollowed) {
					//フォローされてる
					$("#his-relation").text(lang.lang_showontl_followed);
				}
				$("#his-block-btn").hide();
				if (json.isMuted) {
					$("#his-data").addClass("muting");
					$("#his-mute-btn-text").text(lang.lang_status_unmute);
				} else {
					$("#his-mute-btn-text").text(lang.lang_status_mute);
				}
				$(".only-my-data").hide();
				$(".only-his-data").show();
			}
			todc();
		});
}
//一つ前のユーザーデータ表示
function historyShow() {
	var acct_id = $("#his-data").attr("use-acct");
	var user = $("#his-data").attr("history");
	udg(user, acct_id, "true");
}
//選択アカウントのプロフ
function profShow() {
	var acct_id = $("#post-acct-sel").val();
	var user = localStorage.getItem("user-id_" + acct_id);
	udg(user, acct_id);
	hide();
}

//FF関係取得
function relations(user, acct_id) {
	var domain = localStorage.getItem("domain_" + acct_id);
	var at = localStorage.getItem("acct_" + acct_id + "_at");
	var start = "https://" + domain + "/api/v1/accounts/relationships?id=" + user;
	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) {
			var json = json[0];
			if(json.requested) {
				//フォロリク中
				$('#his-data').addClass('following')
				$("#his-follow-btn-text").text(lang.lang_status_requesting)
			}
			if (json.following) {
				//自分がフォローしている
				$("#his-data").addClass("following")
				$("#his-follow-btn-text").text(lang.lang_status_unfollow);
				hisList(user, acct_id);
			} else {
				$("#his-follow-btn-text").text(lang.lang_status_follow);
			}
			if (json.followed_by) {
				//フォローされてる
				$("#his-relation").text(lang.lang_showontl_followed);
			}
			if (json.blocking) {
				$("#his-data").addClass("blocking");
				$("#his-block-btn-text").text(lang.lang_status_unblock);
			} else {
				$("#his-block-btn-text").text(lang.lang_status_block);
			}
			if (json.muting) {
				$("#his-data").addClass("muting");
				$("#his-mute-btn-text").text(lang.lang_status_unmute);
			} else {
				$("#his-mute-btn-text").text(lang.lang_status_mute);
			}
			if (json.muting_notifications) {
				$("#his-data").addClass("mutingNotf");
				$("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_unmute);
			} else {
				$("#his-notf-btn-text").text(lang.lang_showontl_notf + lang.lang_status_mute);
			}
			if (json.domain_blocking) {
				$("#his-data").addClass("blockingDom");
				$("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_unblock);
			} else {
				$("#his-domain-btn-text").text(lang.lang_showontl_domain + lang.lang_status_block);
			}
			//Endorsed
			if (json.endorsed) {
				$("#his-end-btn").addClass("endorsed");
				$("#his-end-btn-text").text(lang.lang_status_unendorse);
			} else {
				$("#his-end-btn").removeClass("endorsed");
				$("#his-end-btn-text").text(lang.lang_status_endorse);
			}
			//Blocked
			if (json.blocked_by) {
				$("#my-data-nav .btn").addClass("disabled");
				$(".his-var-content").hide();
				$("#his-float-blocked").show();
				$("#his-follow-btn").hide();
			}
		});
}
function profbrws() {
	var url = $("#his-openin").attr("data-href");
	postMessage(["openUrl", url], "*");
}
function setMain() {
	var acct_id = $("#his-data").attr("use-acct");
	localStorage.setItem("main", acct_id);
	multiSelector(true);
	M.toast({ html: lang.lang_manager_mainAcct, displayLength: 3000 });
}
//オールリセット
function hisclose() {
	$("#his-data").modal("close");
	reset();
	$("#his-data").attr("history", "");
	localStorage.removeItem("history");
}
function reset() {
	$(".his-var-content:eq(0)").show();
	$(".his-var-content:gt(0)").hide();
	$("#my-data-nav .btn").removeClass("disabled");
	$(".active-back").removeClass("active-back");
	$(".column-first").addClass("active-back");
	$("#his-name").text("Loading");
	$("#his-acct").text("");
	$("#his-prof").attr("src", "../../img/loading.svg");
	$("#his-data").css("background-image", "url(../../img/loading.svg)");
	$("#his-sta").text("");
	$("#his-follow").text("");
	$("#his-follower").text("");
	$("#his-des").html("");
	$("#his-data").css("background-size", "cover");
	$("#his-since").text("");
	$("#his-data").removeClass("following");
	$("#his-data").removeClass("muting");
	$("#his-data").removeClass("blocking");
	$("#his-data").removeClass("mutingNotf");
	$("#his-data").removeClass("blockingDom");
	$("#his-end-btn").removeClass("endorsed");
	$("#his-des").css("max-height", "250px");
	$("#his-bot").html("");
	$("#his-follow-btn").show();
	$("#his-block-btn").show();
	$("#his-mute-btn").show();
	$("#his-notf-btn").show();
	$("#his-domain-btn").show();
	$("#his-emp-btn").show();
	$("#his-follow-btn-text").text(lang.lang_status_follow);
	$("#his-mute-btn-text").text(lang.lang_status_mute);
	$("#his-block-btn-text").text(lang.lang_status_block);
	$("#his-notf-btn").text(lang.lang_showontl_notf + lang.lang_status_mute);
	$("#his-domain-btn").text(lang.lang_showontl_domain + lang.lang_status_block);
	$("#his-relation").text("");
	$(".cont-series").html("");
	$("#domainblock").val("");
	$("#his-lists-a").html(lang.lang_showontl_listwarn);
	$("#his-lists-b").html("");
	$("#his-name-val").val("");
	$("#his-des-val").val("");
	$("#his-f1-name").val("");
	$("#his-f1-val").val("");
	$("#his-f2-name").val("");
	$("#his-f2-val").val("");
	$("#his-f3-name").val("");
	$("#his-f3-val").val("");
	$("#his-f4-name").val("");
	$("#his-f4-val").val("");
	$("#his-endorse").html("");
	$("#his-openin").attr("data-href", "");
	$("#his-float-timeline").show();
	$("#his-float-blocked").hide();
	$("#his-main-acct").show();
	$("#his-proof-prof").html("");
	$('#his-data').removeClass('locked')
	$('#his-data').removeClass('requesting')
}
$("#my-data-nav .anc-link").on("click", function() {
	var target = $(this).attr("go");
	if (target) {
		$("#my-data-nav .anc-link").removeClass("active-back");
		$(this).addClass("active-back");
		$(target).show();
		$(".his-var-content:not(" + target + ")").hide();
	}
});
