<template>
  <div>
    <q-page
      padding
      class="fit row justify-center content-center items-center q-gutter-sm"
    >
      <q-card class="col-12">
        <q-card-section
          class="fit row justify-start content-center items-center"
        >
          <div class="col-xs-12 col-sm-6 text-center text-h6">
            Benutzereinstellungen
          </div>
          <div class="col-xs-12 col-sm-6 q-pa-sm">
            <UserSelector :user="user" @update:user="userUpdated" />
          </div>
        </q-card-section>
        <MainUserSettings :user="user" />
      </q-card>
      <RoleSettings v-if="canEditRoles" />
    </q-page>
  </div>
</template>

<script lang="ts">
import {
  computed,
  defineComponent,
  onBeforeMount,
  ref
} from '@vue/composition-api';
import UserSelector from '../components/UserSelector.vue';
import MainUserSettings from '../components/settings/MainUserSettings.vue';
import RoleSettings from '../components/settings/RoleSettings.vue';
import { Store } from 'vuex';
import { StateInterface } from 'src/store';
import { hasPermission } from 'src/components/permission';
import { PERMISSIONS } from '../permissions';

export default defineComponent({
  name: 'AdminSettings',
  components: { UserSelector, MainUserSettings, RoleSettings },
  setup(_, { root }) {
    const store = <Store<StateInterface>>root.$store;

    onBeforeMount(() => {
      store.dispatch('user/getUsers').catch(error => console.warn(error));
    });

    const canEditRoles = computed(() =>
      hasPermission(PERMISSIONS.ROLES_EDIT, store)
    );
    const user = ref(<FG.User>store.state.user.currentUser);

    // can be dropped with VUE3
    const userUpdated = (value: FG.User) => {
      user.value = value;
      console.log(value);
    };

    return {
      user,
      userUpdated,
      canEditRoles
    };
  }
});
</script>