<template>
    <div class="row">
        <div class="col">
            <div class="row mb-5">
                <p class='is-center h2'>Профили</p>
            </div>
            <div class="row mb-5">
                <div class="col"></div>
                <div class="col-10 is-center">
                    <button class="button primary" data-bs-toggle="modal" data-bs-target="#customerCreate">
                        Добавить нового пользователя
                    </button>
                </div>
                <div class="col"></div>
            </div>

            <p class='h3 is-center row mb-5'>Список профилей</p>
            <div class="row">
                <div class="col">
                    <div class="row card mb-3">
                        <div class="row">
                            <div class="col-3 is-left h3 fw-bold">ID</div>
                            <div class="col-3 is-center h3 fw-bold">Никнейм</div>
                            <div class="col-3 is-right h3 fw-bold">Пароль</div>
                            <div class="col-2"></div>
                            <div class="col-1"></div>
                        </div>
                    </div>
                    <div v-for="customer in customers" class="row card mb-3">
                        <div class="row">
                            <div class="col-3 is-left h3">{{ customer.id }}</div>
                            <router-link :to="{name: 'Customers', params: {'id': customer.id}}" class="col-3 is-center h3">{{ customer.username }}</router-link>
                            <div class="col-3 is-right h3">
                                <span style="text-overflow: ellipsis; overflow: hidden; max-width: 10ch; white-space: nowrap">
                                    {{ customer.password }}
                                </span>
                            </div>

                            <button style="max-width: 66px; max-height: 38px;" v-on:click="prepareEditModal(customer)" class="button primary outline is-right" data-bs-toggle="modal" data-bs-target="#customerEdit">
                                <i class="fa fa-pencil" aria-hidden="true">
                                </i>
                            </button>

                            <div class="col-1 is-right">
                                <button class="button dark outline is-right" v-on:click="deleteCustomer(customer)" style="max-width: 66px; max-height: 38px;">
                                    <i class="fa fa-trash" aria-hidden="true"></i>
                                </button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="modal fade" id="customerCreate" tabindex="-1" role="dialog" aria-labelledby="customerCreateLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="customerCreateLabel">Создать профиль</h5>
                </div>
                <div class="modal-body text-center">
                    <p>Логин</p>
                    <textarea name="username" v-model="newCustomer.username" cols="30" rows="1"></textarea>
                    <p>Пароль</p>
                    <textarea name="password" v-model="newCustomer.password" id="passwordTextC" cols="30" rows="1"></textarea>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
                    <button type="button" v-on:click="createCustomer()" class="btn btn-primary" data-bs-dismiss="modal">Сохранить</button>
                </div>
            </div>
        </div>
    </div>
    <div class="modal fade" id="customerEdit" tabindex="-1" role="dialog" aria-labelledby="customerEditLabel" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content" id="edit-customer-form">
                <div class="modal-header">
                    <h5 class="modal-title" id="customerEditLabel">Редактировать профиль</h5>
                </div>
                <div class="modal-body text-center">
                    <p>Логин</p>
                    <textarea name="username" v-model="editedCustomer.username" cols="30" rows="1"></textarea>
                    <p>Пароль</p>
                    <textarea name="password" v-model="editedCustomer.password" cols="30" rows="1"></textarea>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
                    <button type="button" v-on:click="editCustomer()" class="btn btn-primary" data-bs-dismiss="modal">Изменить</button>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
  export default {
      data() {
          return {
              editedCustomer: {
                  id: -1,
                  username: '',
                  password: ''
              },
              newCustomer: {
                  id: -1,
                  username: '',
                  password: ''
              },
              customers: [],
              currentCustomerId: -1
          }
      },
      methods: {
          async updateCustomers() {
              const response = await fetch(
                  "http://localhost:8080/api/1.0/customer",
                  {
                      method: "GET",
                      headers: {
                          "Authorization": "Bearer " + localStorage.getItem("token")
                      }
                  }
              )

              this.customers = await response.json()
          },
          async createCustomer() {
              const response = await fetch(
                  "http://localhost:8080/api/1.0/customer",
                  {
                      method: "POST",
                      headers: {
                          'Content-Type': 'application/json',
                          "Authorization": "Bearer " + localStorage.getItem("token")
                      },
                      body: JSON.stringify({
                          "username": this.newCustomer.username,
                          "password": this.newCustomer.password
                      })
                  }
              )

              await this.updateCustomers()
          },
          async editCustomer() {
              const response = await fetch(
                  "http://localhost:8080/api/1.0/customer/" + this.editedCustomer.id,
                  {
                      method: "PUT",
                      headers: {
                          'Content-Type': 'application/json',
                          "Authorization": "Bearer " + localStorage.getItem("token")
                      },
                      body: JSON.stringify({
                          "username": this.editedCustomer.username,
                          "password": this.editedCustomer.password
                      })
                  }
              )

              if (this.currentCustomerId == this.editedCustomer.id) {
                  localStorage.clear()
                  document.dispatchEvent(new Event("token_changed"))
                  this.$router.replace("login")
              }

              await this.updateCustomers()
          },
          async deleteCustomer(customer) {
              const response = await fetch(
                  "http://localhost:8080/api/1.0/customer/" + customer.id,
                  {
                      method: "DELETE",
                      headers: {
                          "Authorization": "Bearer " + localStorage.getItem("token")
                      }
                  }
              )

              if (this.currentCustomerId == this.editedCustomer.id) {
                  localStorage.clear()
                  document.dispatchEvent(new Event("token_changed"))
                  this.$router.replace("login")
              }

              await this.updateCustomers()
          },
          async prepareEditModal(customer) {
              this.editedCustomer.username = customer.username
              this.editedCustomer.id = customer.id
          },
          async getCurrentCustomer() {
              const response = await fetch(
                  "http://localhost:8080/api/1.0/customer/me",
                  {
                      method: "GET",
                      headers: {
                          "Authorization": "Bearer " + localStorage.getItem("token")
                      }
                  }
              )

              this.currentCustomerId = (await response.json())['id']
          }
      },
      async beforeMount() {
          if (localStorage.getItem("role") !== "ADMIN") {
              this.$router.replace("login")
          }
          if (!localStorage.getItem("token") === null) {
              this.$router.replace("login")
          }

          await this.getCurrentCustomer()

          await this.updateCustomers()
      }
  }
</script>

<style>

</style>