<template>
  <q-card style="text-align: center;">
    <q-card-section class="row justify-center content-stretch">
      <div class="col-4">
        <q-avatar style="width: 100%; height: auto;">
          <img :src="avatarLink" />
        </q-avatar>
      </div>
      <div class="col-8">
        <span class="text-h6">Hallo {{ name }}</span><br />
        <span v-if="hasBirthday">Herzlichen Glückwunsch zum Geburtstag!<br /></span>
        <span v-if="birthday.length > 0">Heute <span v-if="birthday.length === 1">hat </span><span v-else>haben </span><span
            v-for="(user, index) in birthday"
            v-bind:key="index"
          >{{user.display_name}}<span v-if="index < (birthday.length-1)">, </span></span> Geburtstag.</span>
        <span v-else>Heute stehen keine Geburtstage an</span>
      </div>
    </q-card-section>
  </q-card>
</template>

<script lang="ts">
import {
  computed,
  defineComponent,
  onMounted,
  ref,
} from '@vue/composition-api';
import { Store } from 'vuex';
import { StateInterface } from 'src/store';
import MD5 from 'crypto-js/md5';

export default defineComponent({
  name: 'Greeting',
  setup(_, { root }) {
    const store = <Store<StateInterface>>root.$store;
    onMounted(() => store.dispatch('user/getUsers', false));

    const avatarLink = computed(() => {
      const hash = MD5(store.state.user.currentUser?.mail || '').toString();
      return `https://www.gravatar.com/avatar/${hash}?s=500&d=robohash`;
    });

    const name = ref(store.state.user.currentUser?.display_name);

    function userHasBirthday(user: FG.User) {
      const today = new Date();
      return (
        user.birthday &&
        user.birthday.getMonth === today.getMonth &&
        user.birthday.getDate === today.getDate
      );
    }

    const hasBirthday = computed(() => {
      return userHasBirthday(<FG.User>store.state.user.currentUser);
    });

    const birthday = computed(() =>
      store.state.user.users
        .filter(userHasBirthday)
        .filter((user) => user.userid !== store.state.user.currentUser?.userid)
    );

    return { avatarLink, name, hasBirthday, birthday };
  },
});
</script>
