<template>
<div class="welcome">
	<div>
		<img :src="$store.state.device.darkmode ? 'assets/title.dark.svg' : 'assets/title.light.svg'" alt="Misskey">
		<div class="form">
			<form @submit.prevent="onSubmit">
				<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]+$" placeholder="ユーザー名" autofocus required @change="onUsernameChange">
					<span>ユーザー名</span>
					<span slot="prefix">@</span>
					<span slot="suffix">@{{ host }}</span>
				</ui-input>
				<ui-input v-model="password" type="password" placeholder="パスワード" required>
					<span>パスワード</span>
					<span slot="prefix">%fa:lock%</span>
				</ui-input>
				<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" placeholder="トークン" required/>
				<ui-button type="submit" :disabled="signing">{{ signing ? 'ログインしています' : 'ログイン' }}</ui-button>
			</form>
			<div>
				<a :href="`${apiUrl}/signin/twitter`">Twitterでログイン</a>
			</div>
		</div>
		<div class="tl">
			<p>%fa:comments R% タイムラインを見てみる</p>
			<mk-welcome-timeline/>
		</div>
		<div class="users">
			<mk-avatar class="avatar" v-for="user in users" :key="user.id" :user="user"/>
		</div>
		<footer>
			<small>{{ copyright }}</small>
		</footer>
	</div>
</div>
</template>

<script lang="ts">
import Vue from 'vue';
import { apiUrl, copyright, host } from '../../../config';

export default Vue.extend({
	data() {
		return {
			signing: false,
			user: null,
			username: '',
			password: '',
			token: '',
			apiUrl,
			copyright,
			users: [],
			host
		};
	},
	mounted() {
		(this as any).api('users', {
			sort: '+follower',
			limit: 20
		}).then(users => {
			this.users = users;
		});
	},
	methods: {
		onUsernameChange() {
			(this as any).api('users/show', {
				username: this.username
			}).then(user => {
				this.user = user;
			});
		},
		onSubmit() {
			this.signing = true;

			(this as any).api('signin', {
				username: this.username,
				password: this.password,
				token: this.user && this.user.twoFactorEnabled ? this.token : undefined
			}).then(() => {
				location.reload();
			}).catch(() => {
				alert('something happened');
				this.signing = false;
			});
		}
	}
});
</script>

<style lang="stylus" scoped>
.welcome
	background #fff

	> div
		padding 16px
		margin 0 auto
		max-width 500px

		> img
			display block
			max-width 200px
			margin 0 auto

		.form
			margin-bottom 16px

			> form
				padding 16px

				button
					display block
					width 100%
					padding 10px
					margin 0
					color #333
					font-size 1em
					text-align center
					text-decoration none
					text-shadow 0 1px 0 rgba(255, 255, 255, 0.9)
					background-image linear-gradient(#fafafa, #eaeaea)
					border 1px solid #ddd
					border-bottom-color #cecece
					border-radius 4px

					&:active
						background-color #767676
						background-image none
						border-color #444
						box-shadow 0 1px 3px rgba(#000, 0.075), inset 0 0 5px rgba(#000, 0.2)

		> .tl
			background #fff
			border solid 1px rgba(#000, 0.2)
			border-radius 8px
			overflow hidden

			> p
				margin 0
				padding 12px 20px
				color #555
				background #f5f5f5
				border-bottom solid 1px #ddd

			> .mk-welcome-timeline
				max-height 300px
				overflow auto

		> .users
			margin 12px 0 0 0

			> *
				display inline-block
				margin 4px
				width 38px
				height 38px
				border-radius 6px

		> footer
			text-align center
			color #fff

			> small
				display block
				margin 16px 0 0 0
				opacity 0.7

</style>
