<script>
  import { getLocaleFromNavigator, _ } from "svelte-i18n";
  import {
    DonorService,
  } from "@odit/lfk-client-js";
  import store from "../../store";
  import DonorsEmptyState from "./DonorsEmptyState.svelte";
  import Toastify from "toastify-js";
  $: searchvalue = "";
  $: active_deletes = [];
  export let current_donors = [];
  const donors_promise = DonorService.donorControllerGetAll().then((val) => {
    current_donors = val;
  });
  function should_display_based_on_id(id) {
    if (searchvalue.toString().slice(-1) === "*") {
      return id.toString().startsWith(searchvalue.replace("*", ""));
    }
    return id.toString() === searchvalue;
  }
</script>

{#if store.state.jwtinfo.userdetails.permissions.includes('DONOR:GET')}
  {#await donors_promise}
    <div
      class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
      role="alert">
      <p class="font-bold">donors are being loaded</p>
      <p class="text-sm">{$_('this-might-take-a-moment')}</p>
    </div>
  {:then}
    {#if current_donors.length === 0}
      <DonorsEmptyState />
    {:else}
      <input
        type="search"
        bind:value={searchvalue}
        placeholder={$_('datatable.search')}
        aria-label={$_('datatable.search')}
        class="gridjs-input gridjs-search-input mb-4" />
      <!-- <div class="h-12">
        {#if current_donors.some((d) => d.is_selected === true)}
          <button
            on:click={() => {
              const locale = getLocaleFromNavigator();
              const toast = Toastify({
                text: $_('generating-pdf'),
                duration: -1,
              }).showToast();
              fetch(
                `https://dev.lauf-fuer-kaya.de/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
                {
                  method: 'POST',
                  headers: {
                    'Content-Type': 'application/json',
                  },
                  body: JSON.stringify(
                    current_donors.filter((r) => r.is_selected === true)
                  ),
                }
              )
                .then((response) => {
                  if (response.status != '200') {
                    toast.hideToast();
                    Toastify({
                      text: $_('pdf-generation-failed'),
                      duration: 3500,
                      backgroundColor:
                        'linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)',
                    }).showToast();
                  } else {
                    return response.blob();
                  }
                })
                .then((blob) => {
                  const url = window.URL.createObjectURL(blob);
                  let a = document.createElement('a');
                  a.href = url;
                  a.download = 'Sponsoring.pdf';
                  document.body.appendChild(a);
                  a.click();
                  a.remove();
                  toast.hideToast();
                  Toastify({
                    text: $_('pdf-successfully-generated'),
                    duration: 3500,
                    backgroundColor:
                      'linear-gradient(to right, #00b09b, #96c93d)',
                  }).showToast();
                })
                .catch((err) => {
                  console.error(err);
                });
            }}
            type="button"
            class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-600 text-base font-medium text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 sm:w-auto sm:text-sm">
            {$_('generate-sponsoring-contracts')}
          </button>
        {/if}
      </div> -->
      <div
        class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
        <table class="divide-y divide-gray-200 w-full">
          <thead class="bg-gray-50">
            <tr>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                <span
                  on:click={() => {
                    const newstate = !current_donors.some((d) => d.is_selected === true);
                    current_donors = current_donors.map((r) => {
                      r.is_selected = newstate;
                      return r;
                    });
                  }}
                  class="underline cursor-pointer select-none">{#if current_donors.some((d) => d.is_selected === true)}
                    {$_('deselect-all')}
                  {:else}{$_('select-all')}{/if}
                </span>
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                {$_('name')}
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                {$_('contact-information')}
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                donations
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                total donation amount
              </th>
              <th scope="col" class="relative px-6 py-3">
                <span class="sr-only">{$_('action')}</span>
              </th>
            </tr>
          </thead>
          <tbody class="divide-y divide-gray-200">
            {#each current_donors as donor}
              {#if donor.firstname
                .toLowerCase()
                .includes(
                  searchvalue.toLowerCase()
                ) || donor.middlename
                  .toLowerCase()
                  .includes(
                    searchvalue.toLowerCase()
                  ) || donor.lastname
                  .toLowerCase()
                  .includes(
                    searchvalue.toLowerCase()
                  ) || should_display_based_on_id(donor.id)}
                  <tr
                    data-rowid="donor_{donor.id}">
                    <td class="px-6 py-4 whitespace-nowrap">
                      <input
                        bind:checked={donor.is_selected}
                        type="checkbox"
                        class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
                    </td>
                    <td class="px-6 py-4 whitespace-nowrap">
                      <div class="flex items-center">
                        <div class="ml-4">
                          <div class="text-sm font-medium text-gray-900">
                            {donor.firstname}
                            {donor.middlename || ''}
                            {donor.lastname}
                          </div>
                        </div>
                      </div>
                    </td>
                    <td class="px-6 py-4 whitespace-nowrap">
                      {#if donor.email}
                        <div class="text-sm text-gray-500">{donor.email}</div>
                      {/if}
                      {#if donor.phone}
                        <div class="text-sm text-gray-500">{donor.phone}</div>
                      {/if}
                      {#if donor.address.address1 !== null}
                        {donor.address.address1}<br />
                        {donor.address.address2 || ''}<br />
                        {donor.address.postalcode}
                        {donor.address.city}
                        {donor.address.country}
                      {/if}
                    </td>
                    <td class="px-6 py-4 whitespace-nowrap">
                      TODO
                    </td>
                    <td class="px-6 py-4 whitespace-nowrap">
                      {donor.donationAmount}
                    </td>
                    {#if active_deletes[donor.id] === true}
                      <td
                        class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                        <button
                          on:click={() => {
                            active_deletes[donor.id] = false;
                          }}
                          tabindex="0"
                          class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">{$_('cancel-delete')}</button>
                          <button
                          on:click={() => {
                            DonorService.donorControllerRemove(donor.id, false)
                              .then((resp) => {
                                current_donors = current_donors.filter((obj) => obj.id !== donor.id);
                                Toastify({
                                  text: 'Donor deleted',
                                  duration: 500,
                                  backgroundColor:
                                    'linear-gradient(to right, #00b09b, #96c93d)',
                                }).showToast();
                              })
                              // .catch((err) => {
                              //   modal_open = true;
                              //   delete_org = o;
                              // });
                          }}
                          tabindex="0"
                          class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('confirm-delete')}</button>
                      </td>
                    {:else}
                      <td
                        class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                        <a
                          href="./{donor.id}"
                          class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
                        {#if store.state.jwtinfo.userdetails.permissions.includes('DONOR:DELETE')}
                          <button
                            on:click={() => {
                              active_deletes[donor.id] = true;
                            }}
                            tabindex="0"
                            class="ml-4 text-red-600 hover:text-red-900 cursor-pointer">{$_('delete')}</button>
                        {/if}
                      </td>
                    {/if}
                  </tr>
                {/if}
            {/each}
          </tbody>
        </table>
      </div>
    {/if}
  {:catch error}
    <div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
      <span class="inline-block align-middle mr-8">
        <b class="capitalize">{$_('general_promise_error')}</b>
        {error}
      </span>
    </div>
  {/await}
{/if}
