<script>
  import { _ } from "svelte-i18n";
  import { RunnerService } from "@odit/lfk-client-js";
  import store from "../store";
  import RunnersEmptyState from "./RunnersEmptyState.svelte";
  $: searchvalue = "";
  $: active_deletes = [];
  export let current_runners = [];
  const runners_promise = RunnerService.runnerControllerGetAll().then((val) => {
    current_runners = val;
  });
</script>

{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:GET')}
  {#await runners_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">runners are being loaded...</p>
      <p class="text-sm">{$_('this-might-take-a-moment')}</p>
    </div>
  {:then}
    {#if current_runners.length === 0}
      <RunnersEmptyState />
    {:else}
      <input
        type="search"
        bind:value={searchvalue}
        placeholder={$_('datatable.search')}
        aria-label={$_('datatable.search')}
        class="gridjs-input gridjs-search-input mb-4" />
      <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">
                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">
                Group
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                Distance in km
              </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_runners as runner}
              {#if Object.values(runner)
                .toString()
                .toLowerCase()
                .includes(searchvalue)}
                <tr data-rowid="user_{runner.id}">
                  <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 dark:text-gray-100">
                          {runner.firstname}
                          {runner.middlename || ''}
                          {runner.lastname}
                        </div>
                      </div>
                    </div>
                  </td>
                  <td class="px-6 py-4 whitespace-nowrap">
                    {#if runner.email}
                      <div class="text-sm text-gray-500">{runner.email}</div>
                    {/if}
                    {#if runner.phone}
                      <div class="text-sm text-gray-500">{runner.phone}</div>
                    {/if}
                  </td>
                  <td class="px-6 py-4 whitespace-nowrap">
                    {runner.group.name}
                  </td>
                  <td class="px-6 py-4 whitespace-nowrap">{runner.distance}</td>
                  {#if active_deletes[runner.id] === true}
                    <td
                      class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                      <button
                        on:click={() => {
                          active_deletes[runner.id] = false;
                        }}
                        tabindex="0"
                        class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">Cancel
                        Delete</button>
                      <button
                        on:click={() => {
                          RunnerService.runnerControllerRemove(runner.id, true)
                            .then((resp) => {
                              current_runners = current_runners.filter((obj) => obj.id !== runner.id);
                            })
                            .catch((err) => {
                              // error deleting user
                            });
                        }}
                        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="./{runner.id}"
                        class="text-indigo-600 hover:text-indigo-900">Edit</a>
                      {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')}
                        <button
                          on:click={() => {
                            active_deletes[runner.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}
