<template>
  <div class="col-sm-4 col-xs-12">
    <q-input
      v-model.number="amount"
      ref="refAmount"
      type="number"
      filled
      label="Betrag"
      step="0.1"
      min="0"
      suffix="€"
      :rules="[check_cent_step]"
    />
  </div>
  <div class="col-sm-4 col-xs-6">
    <UserSelector v-model="receiver" label="Empfänger" />
  </div>
  <div class="col-sm-4 col-xs-6">
    <q-btn style="width: 100%" color="primary" :disable="sendDisabled" label="Senden" @click="sendAmount" />
  </div>
</template>
<script lang="ts">
import { computed, defineComponent, PropType, ref } from 'vue';
import { QInput } from 'quasar';
import UserSelector from '@flaschengeist/users/src/components/UserSelector.vue';
import { useBalanceStore } from '../store';
import { check_cent_step } from '../utils';
import { useUserStore } from '@flaschengeist/api';
export default defineComponent({
  name: 'BalanceTransferBody',
  components: { UserSelector },
  props: {
    user: {
      type: [Object, String] as PropType<FG.User | string>,
      required: true,
    },
  },
  emits: {
    changeBalance: ({ sender, receiver }: { sender: FG.User; receiver: FG.User }) => sender && receiver,
  },
  setup(props, { emit }) {
    const store = useBalanceStore();
    const userStore = useUserStore();
    const receiver = ref<FG.User | undefined>(undefined);
    const amount = ref<number>(0);
    const refAmount = ref<QInput>();
    const sender = computed(() =>
      (<FG.User>props.user).userid
        ? <FG.User>props.user
        : <FG.User>userStore.users.find((a) => a.userid === <string>props.user)
    );

    const sendDisabled = computed(() => {
      return !(
        receiver.value &&
        sender.value &&
        sender.value.userid != receiver.value.userid &&
        amount.value > 0 &&
        !refAmount.value?.hasError
      );
    });

    async function sendAmount() {
      await refAmount.value?.validate();
      if (receiver.value && !refAmount.value?.hasError) {
        await store.changeBalance(amount.value, receiver.value, sender.value);
        emit('changeBalance', { sender: sender.value, receiver: receiver.value });
      }
    }
    return {
      receiver,
      sender,
      amount,
      sendAmount,
      sendDisabled,
      refAmount,
      check_cent_step,
    };
  },
});
</script>

<style scoped></style>