<!--
SPDX-FileCopyrightText: syuilo and other misskey contributors
SPDX-License-Identifier: AGPL-3.0-only
-->

<template>
	<div>
		<div v-if="game.ready" :class="$style.game">
			<div :class="$style.cps" class="">{{ number(cps) }}cps</div>
			<div :class="$style.count" class=""><img :class="[$style.icon,{[$style.dark]:darkMode}]" alt="Cosaque daihuku"
																							 src="https://media.discordapp.net/attachments/1153099592863334431/1162139796647448576/AfovawbDhjHYAAAAAElFTkSuQmCC.png"/>
				{{ number(cookies) }}
			</div>
			<button v-click-anime class="_button" @click="onClick">
				<img src="https://cdn.discordapp.com/attachments/1153099592863334431/1160169965568143391/dihk_cossack.gif"
						 :class="$style.img">
			</button>
		</div>
		<div v-else>
			<MkLoading/>
		</div>
	</div>
</template>

<script lang="ts" setup>
import {computed, onMounted, onUnmounted} from 'vue';
import MkPlusOneEffect from '@/components/MkPlusOneEffect.vue';
import * as os from '@/os.js';
import {useInterval} from '@/scripts/use-interval.js';
import * as game from '@/scripts/clicker-game.js';
import number from '@/filters/number.js';
import {claimAchievement} from '@/scripts/achievements.js';
import {defaultStore} from "@/store.js";

const darkMode = computed(defaultStore.makeGetterSetter('darkMode'));
const saveData = game.saveData;
const cookies = computed(() => saveData.value?.cookies);
let cps = $ref(0);
let prevCookies = $ref(0);

function onClick(ev: MouseEvent) {
	const x = ev.clientX;
	const y = ev.clientY;
	os.popup(MkPlusOneEffect, {x, y}, {}, 'end');

	saveData.value!.cookies++;
	saveData.value!.totalCookies++;
	saveData.value!.totalHandmadeCookies++;
	saveData.value!.clicked++;

	if (cookies.value === 1) {
		claimAchievement('cookieClicked');
	}
}

useInterval(() => {
	const diff = saveData.value!.cookies - prevCookies;
	cps = diff;
	prevCookies = saveData.value!.cookies;
}, 1000, {
	immediate: false,
	afterMounted: true,
});

useInterval(game.save, 1000 * 5, {
	immediate: false,
	afterMounted: true,
});

onMounted(async () => {
	await game.load();
	prevCookies = saveData.value!.cookies;
});

onUnmounted(() => {
	game.save();
});
</script>

<style lang="scss" module>
.game {
	padding: 16px;
	text-align: center;
}

.cps {
	position: absolute;
	top: 12px;
	left: 12px;
	opacity: 0.5;
}

.count {
	font-size: 1.3em;
	margin-bottom: 6px;
}

.img {
	max-width: 90px;
}

$color-scheme: var(--color-scheme);


.icon {
	width: 1.3em;
	vertical-align: -24%;
}

.dark {
	filter: invert(1);
}
</style>
