<template>
  <div>
    <v-card v-if="user" :loading="loading" style="margin-top: 3px">
      <v-card-title>{{ user.firstname }} {{ user.lastname }}</v-card-title>
      <v-card-text>
        <v-row>
          <v-col cols="12" sm="6">
            <v-text-field
              outlined
              label="Vornamen"
              :placeholder="user.firstname"
              v-model="firstname"
              readonly
            />
          </v-col>
          <v-col cols="12" sm="6">
            <v-text-field
              outlined
              label="Nachname"
              :placeholder="user.lastname"
              v-model="lastname"
              readonly
            />
          </v-col>
        </v-row>
        <v-row>
          <v-col cols="12" sm="6">
            <v-text-field
              outlined
              label="Benutzername"
              :placeholder="user.username"
              v-model="username"
              readonly
            ></v-text-field>
          </v-col>
          <v-col cols="12" sm="6">
            <v-text-field
              ref="mail"
              outlined
              label="E-Mail"
              :placeholder="user.mail"
              v-model="mail"
              readonly
            ></v-text-field>
          </v-col>
        </v-row>
        <v-row>
          <v-col cols="12" sm="6">
            <v-text-field
              outlined
              label="Password"
              type="password"
              v-model="password"
            />
          </v-col>
          <v-col cols="12" sm="6">
            <v-text-field
              ref="password"
              outlined
              label="Password bestätigen"
              type="password"
              :disabled="!password"
              :rules="[equal_password]"
            />
          </v-col>
        </v-row>
        <v-divider />
        <v-row>
          <v-col cols="12" sm="4">
            <v-text-field
              outlined
              label="Sperrlimit"
              readonly
              :value="(user.limit / 100).toFixed(2).toString() + '€'"
            />
          </v-col>
          <v-col cols="12" sm="4">
            <v-combobox
              outlined
              label="Sperrstatus"
              v-model="lock"
              append-icon
              readonly
            >
              <template v-slot:selection="data">
                <v-chip :color="lockColor">
                  {{ data.item }}
                </v-chip>
              </template>
            </v-combobox>
          </v-col>
          <v-col cols="12" sm="4">
            <v-combobox
              outlined
              label="Autosperre"
              v-model="autoLock"
              readonly
              append-icon
            >
              <template v-slot:selection="data">
                <v-chip :color="autoLockColor">
                  {{ data.item }}
                </v-chip>
              </template>
            </v-combobox>
          </v-col>
        </v-row>
        <v-row>
          <v-col>
            <v-combobox
              outlined
              multiple
              label="Gruppen"
              readonly
              v-model="user.group"
              append-icon
            >
              <template v-slot:selection="data">
                <v-icon class="ma-2">{{
                  data.item === 'user'
                    ? person
                    : data.item === 'bar'
                    ? bar
                    : data.item === 'moneymaster'
                    ? finanzer
                    : data.item === 'gastro'
                    ? gastro
                    : ''
                }}</v-icon>
              </template>
            </v-combobox>
          </v-col>
          <v-col>
            <v-text-field outlined :value="computeStatus" readonly label="Mitgliedsstatus"/>
          </v-col>
          <v-col>
            <v-text-field outlined :value="user.voting ? 'ja' : 'nein'" readonly label="Stimmrecht" />
          </v-col>
        </v-row>
      </v-card-text>
      <v-card-actions>
        <v-spacer></v-spacer>
        <v-btn @click="save">Save</v-btn>
      </v-card-actions>
      <v-expand-transition>
        <v-alert type="error" v-if="error">{{ error }}</v-alert>
      </v-expand-transition>
    </v-card>
  </div>
</template>

<script>
import {
  mdiAccount,
  mdiGlassCocktail,
  mdiCurrencyEur,
  mdiFoodForkDrink
} from '@mdi/js'
import { mapGetters, mapActions } from 'vuex'
export default {
  name: 'Config',
  data() {
    return {
      person: mdiAccount,
      bar: mdiGlassCocktail,
      finanzer: mdiCurrencyEur,
      gastro: mdiFoodForkDrink,
      username: null,
      mail: null,
      firstname: null,
      lastname: null,
      password: null,
      equal_password: value =>
        this.password === value || 'Passwörter sind nicht identisch.',
      email: value => {
        if (value.length > 0) {
          const pattern = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
          return pattern.test(value) || 'keine gültige E-Mail'
        }
        return true
      }
    }
  },
  methods: {
    ...mapActions({
      saveConfig: 'user/saveConfig',
      getStatus: 'user/getStatus'
    }),
    save() {
      let user = {}
      if (this.firstname) user.firstname = this.firstname
      if (this.lastname) user.lastname = this.lastname
      if (this.username) user.username = this.username
      if (this.$refs.mail.validate()) {
        if (this.mail) user.mail = this.mail
      }
      if (this.$refs.password.validate()) {
        if (this.password) user.password = this.password
      }
      this.saveConfig({ oldUsername: user.username, ...user })
    }
  },
  computed: {
    ...mapGetters({
      user: 'user/user',
      error: 'user/error',
      loading: 'user/loading',
      status: 'user/status'
    }),
    lock() {
      return this.user.locked ? 'gesperrt' : 'nicht gesperrt'
    },
    lockColor() {
      return this.user.locked ? 'red' : 'green'
    },
    autoLock() {
      return this.user.autoLock ? 'aktiviert' : 'deaktiviert'
    },
    autoLockColor() {
      return this.user.autoLock ? 'green' : 'red'
    },
    computeStatus() {
      try {
        return this.status.find(a => a.id == this.user.statusgroup).name
      } catch (e) {
        return null
      }
    }
  },
  created() {
    this.getStatus()
  }
}
</script>

<style scoped></style>