<template>
<MkPagination ref="emojisDraftPaginationComponent" :pagination="paginationDraft">
	<template #empty><span>{{ i18n.ts.noCustomEmojis }}</span></template>
	<template #default="{items}">
		<div class="ldhfsamy">
			<template v-for="emoji in items" :key="emoji.id">
				<div class="emoji _panel">
					<div class="img">
						<div class="imgLight"><img :src="emoji.url" :alt="emoji.name"/></div>
						<div class="imgDark"><img :src="emoji.url" :alt="emoji.name"/></div>
					</div>
					<div class="info">
						<div class="name">{{ i18n.ts.name }}: {{ emoji.name }}</div>
						<div class="category">{{ i18n.ts.category }}:{{ emoji.category }}</div>
						<div class="aliases">{{ i18n.ts.tags }}:{{ emoji.aliases.join(' ') }}</div>
						<div class="license">{{ i18n.ts.license }}:{{ emoji.license }}</div>
					</div>
					<div class="edit-button">
						<MkButton primary class="edit" @click="editDraft(emoji)">
							{{ i18n.ts.edit }}
						</MkButton>
						<MkButton class="draft" @click="undrafted(emoji)">
							{{ i18n.ts.undrafted }}
						</MkButton>
						<MkButton danger class="delete" @click="deleteDraft(emoji)">
							{{ i18n.ts.delete }}
						</MkButton>
					</div>
				</div>
			</template>
		</div>
	</template>
</MkPagination>
</template>

<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, shallowRef } from 'vue';
import MkPagination from '@/components/MkPagination.vue';
import * as os from '@/os';
import { i18n } from '@/i18n';
import MkButton from '@/components/MkButton.vue';

const emojisDraftPaginationComponent = shallowRef<InstanceType<typeof MkPagination>>();

const query = ref(null);

const paginationDraft = {
	endpoint: 'emoji-drafts' as const,
	limit: 30,
	params: computed(() => ({
		query: (query.value && query.value !== '') ? query.value : null,
	})),
};

const editDraft = (emoji) => {
	emoji.isDraft = true;
	os.popup(defineAsyncComponent(() => import('@/components/MkEmojiEditDialog.vue')), {
		emoji: emoji,
		isRequest: false,
		isDraftEdit: true,
	}, {
		done: result => {
			if (result.updated) {
				emojisDraftPaginationComponent.value.updateItem(result.updated.id, (oldEmoji: any) => ({
					...oldEmoji,
					...result.updated,
				}));
				emojisDraftPaginationComponent.value.reload();
			} else if (result.deleted) {
				emojisDraftPaginationComponent.value.removeItem((item) => item.id === emoji.id);
				emojisDraftPaginationComponent.value.reload();
			}
		},
	}, 'closed');
};

async function undrafted(emoji) {
	const { canceled } = await os.confirm({
		type: 'warning',
		text: i18n.t('undraftAreYouSure', { x: emoji.name }),
	});
	if (canceled) return;

	await os.api('admin/emoji/draft-update', {
		id: emoji.id,
		fileId: emoji.fileId,
		name: emoji.name,
		category: emoji.category,
		aliases: emoji.aliases,
		license: emoji.license,
		isSensitive: emoji.isSensitive,
		localOnly: emoji.localOnly,
		isDraft: false,
	});

	emojisDraftPaginationComponent.value.removeItem((item) => item.id === emoji.id);
	emojisDraftPaginationComponent.value.reload();
}

async function deleteDraft(emoji) {
	const { canceled } = await os.confirm({
		type: 'warning',
		text: i18n.t('removeAreYouSure', { x: emoji.name }),
	});
	if (canceled) return;

	os.api('admin/emoji/delete', {
		id: emoji.id,
	}).then(() => {
		emojisDraftPaginationComponent.value.removeItem((item) => item.id === emoji.id);
		emojisDraftPaginationComponent.value.reload();
	});
}
</script>

<style lang="scss" scoped>
.empty {
	margin: var(--margin);
}

.ldhfsamy {
	> .emoji {
		align-items: center;
		padding: 11px;
		text-align: left;
		border: solid 1px var(--panel);
		margin: 10px;

		> .img {
			display: grid;
			grid-row: 1;
			grid-column: 1/ span 2;
			grid-template-columns: 50% 50%;
			place-content: center;
			place-items: center;

			> .imgLight {
				display: grid;
				grid-column: 1;
				background-color: #fff;
				margin-bottom: 12px;
				> img {
					max-height: 64px;
					max-width: 100%;
				}
			}

			> .imgDark {
				display: grid;
				grid-column: 2;
				background-color: #000;
				margin-bottom: 12px;
				> img {
					max-height: 64px;
					max-width: 100%;
				}
			}
		}

		> .info {
			display: grid;
			grid-row: 2;
			grid-template-rows: 30px 30px 30px;

			> .name {
				grid-row: 1;
				text-overflow: ellipsis;
				overflow: hidden;
			}

			> .category {
				grid-row: 2;
				text-overflow: ellipsis;
				overflow: hidden;
			}

			> .aliases {
				grid-row: 3;
				text-overflow: ellipsis;
				overflow: hidden;
			}

			> .license {
				grid-row: 4;
				text-overflow: ellipsis;
				overflow: hidden;
			}
		}

		> .edit-button {
			display: grid;
			grid-template-rows: 42px;
			margin-top: 6px;

			> .edit {
				grid-row: 1;
				width: 100%;
				margin: 6px 0;
			}

			> .draft {
				grid-row: 2;
				width: 100%;
				margin: 6px 0;
			}

			> .delete {
				grid-row: 3;
				width: 100%;
				margin: 6px 0;
			}
		}
	}
}
</style>