<template>
	<div>
		<div class="container">
			<table class="table is-striped">
				<thead>
					<tr>
						<td>Profile Picture</td>
						<td>User ID</td>
						<td>GitHub ID</td>
						<td>Password</td>
						<td>Username</td>
						<td>Role</td>
						<td>Email Address</td>
						<td>Email Verified</td>
						<td>Likes</td>
						<td>Dislikes</td>
						<td>Songs Requested</td>
						<td>Options</td>
					</tr>
				</thead>
				<tbody>
					<tr v-for="(user, index) in users" :key="index">
						<td>
							<img
								class="user-avatar"
								src="/assets/notes-transparent.png"
							/>
						</td>
						<td>{{ user._id }}</td>
						<td v-if="user.services.github">
							{{ user.services.github.id }}
						</td>
						<td v-else>
							Not Linked
						</td>
						<td v-if="user.hasPassword">
							Yes
						</td>
						<td v-else>
							Not Linked
						</td>
						<td>{{ user.username }}</td>
						<td>{{ user.role }}</td>
						<td>{{ user.email.address }}</td>
						<td>{{ user.email.verified }}</td>
						<td>{{ user.liked.length }}</td>
						<td>{{ user.disliked.length }}</td>
						<td>{{ user.songsRequested }}</td>
						<td>
							<button
								class="button is-primary"
								@click="edit(user)"
							>
								Edit
							</button>
						</td>
					</tr>
				</tbody>
			</table>
		</div>
		<edit-user v-if="modals.editUser" />
	</div>
</template>

<script>
import { mapState, mapActions } from "vuex";

import EditUser from "../Modals/EditUser.vue";
import io from "../../io";

export default {
	components: { EditUser },
	data() {
		return {
			users: []
		};
	},
	computed: {
		...mapState("modals", {
			modals: state => state.modals.admin
		})
	},
	methods: {
		edit(user) {
			this.editUser(user);
			this.openModal({ sector: "admin", modal: "editUser" });
		},
		init() {
			this.socket.emit("users.index", result => {
				if (result.status === "success") this.users = result.data;
			});
			this.socket.emit("apis.joinAdminRoom", "users", () => {});
		},
		...mapActions("admin/users", ["editUser"]),
		...mapActions("modals", ["openModal"])
	},
	mounted() {
		io.getSocket(socket => {
			this.socket = socket;
			if (this.socket.connected) this.init();
			io.onConnect(() => this.init());
		});
	}
};
</script>

<style lang="scss" scoped>
@import "styles/global.scss";

body {
	font-family: "Roboto", sans-serif;
}

.user-avatar {
	display: block;
	max-width: 50px;
	margin: 0 auto;
}

td {
	vertical-align: middle;
}

.is-primary:focus {
	background-color: #029ce3 !important;
}
</style>
