<script>
  import { getLocaleFromNavigator, t, _ } from "svelte-i18n";
  import Toastify from "toastify-js";
  import { RunnerTeamService } from "@odit/lfk-client-js";
  const teams_promise = RunnerTeamService.runnerTeamControllerGetAll();
  import store, { users as usersstore } from "../../store.js";
  import TeamsEmptyState from "./TeamsEmptyState.svelte";
  import ConfirmTeamDeletion from "./ConfirmTeamDeletion.svelte";
  import { clickOutside } from "../base/outsideclick";
  $: searchvalue = "";
  $: active_deletes = [];
  $: sponsoring_contracts_download_open = false;
  export let current_teams = [];
  let modal_open = false;
  let delete_team = {};
  usersstore.subscribe((val) => {
    current_teams = val;
  });
  teams_promise.then((data) => {
    usersstore.set(data);
  });
  document.addEventListener("click", function (e) {
      if (
        e.target.parentNode?.parentNode?.id != "sponsoring:dropdown" &&
        e.target.parentNode?.parentNode?.id != "sponsoring:dropdown:menu"
      ) {
        sponsoring_contracts_download_open = false;
      }
  });
  async function generateSponsoringContract(locale) {
    sponsoring_contracts_download_open = false;
    const teams = current_teams.filter((r) => r.is_selected === true);
    const toast = Toastify({
      text: $_("generating-pdfs"),
      duration: -1,
    }).showToast();
    let count = 0;
    for await (const t of teams) {
      count++;
      const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
        t.id
      );
      fetch(
        `${config.baseurl}/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
        {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify(runners),
        }
      )
        .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 = "Sponsorings_" + t.name + ".pdf";
          document.body.appendChild(a);
          a.click();
          a.remove();
          if (count === teams.length) {
            toast.hideToast();
            Toastify({
              text: $_("pdfs-successfully-generated"),
              duration: 3500,
              backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
            }).showToast();
          }
        })
        .catch((err) => {});
    }
  }
</script>

<ConfirmTeamDeletion
  on:cancelDelete={(event) => {
    modal_open = false;
    active_deletes[event.detail.id] = false;
  }}
  bind:modal_open
  bind:delete_team />
{#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:GET')}
  {#await teams_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">{$_('teams-are-being-loaded')}</p>
      <p class="text-sm">{$_('this-might-take-a-moment')}</p>
    </div>
  {:then}
    {#if current_teams.length === 0}
      <TeamsEmptyState />
    {: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_teams.some((r) => r.is_selected === true)}
          <div id="sponsoring:dropdown" class="relative inline-block">
            <div>
              <button
                on:click={() => {
                  sponsoring_contracts_download_open = !sponsoring_contracts_download_open;
                }}
                type="button"
                class="w-full 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:ml-3 sm:w-auto sm:text-sm inline-flex"
                id="options-menu"
                aria-haspopup="true"
                aria-expanded="true">
                {$_('generate-sponsoring-contracts')}
                <svg
                  xmlns="http://www.w3.org/2000/svg"
                  width="24"
                  height="24"
                  viewBox="0 0 24 24"
                  class="-mr-1 ml-2 h-5 w-5"><path
                    fill="none"
                    d="M0 0h24v24H0z" />
                  <path
                    fill="currentColor"
                    d="M3 19h18v2H3v-2zm10-5.83l6.07-6.07 1.42 1.41L12 17 3.52 8.52l1.4-1.42L11 13.17V2h2v11.17z" /></svg>
              </button>
            </div>
            {#if sponsoring_contracts_download_open}
              <div
                class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"
                id="sponsoring:dropdown:menu"
                on:click_outside={() => {
                  sponsoring_contracts_download_open = false;
                }}>
                <div
                  class="py-1"
                  role="menu"
                  aria-orientation="vertical"
                  aria-labelledby="options-menu">
                  <span
                    class="block w-full text-left px-4 py-2 text-sm text-gray-700">{$_('select-language')}</span>
                  <button
                    on:click={() => {
                      generateSponsoringContract('de');
                    }}
                    type="submit"
                    class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900 inline-flex"
                    role="menuitem">
                    {$_('german')}
                  </button>
                  <button
                    on:click={() => {
                      generateSponsoringContract('en');
                    }}
                    type="submit"
                    class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900 inline-flex"
                    role="menuitem">
                    {$_('english')}
                  </button>
                </div>
              </div>
            {/if}
          </div>
        {/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_teams.some((r) => r.is_selected === true);
                    current_teams = current_teams.map((r) => {
                      r.is_selected = newstate;
                      return r;
                    });
                  }}
                  class="underline cursor-pointer select-none">{#if current_teams.some((r) => r.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">
                {$_('organization')}
              </th>
              <th
                scope="col"
                class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
                {$_('contact')}
              </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_teams as t}
              {#if Object.values(t)
                .toString()
                .toLowerCase()
                .includes(searchvalue)}
                <tr data-rowid="team_{t.id}">
                  <td class="px-6 py-4 whitespace-nowrap">
                    <input
                      bind:checked={t.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">
                          {t.name}
                        </div>
                      </div>
                    </div>
                  </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">
                          {#if t.parentGroup}
                            <a
                              href="../orgs/{t.parentGroup.id}"
                              class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.parentGroup.name}</a>
                          {:else}{$_('no-organization-specified')}{/if}
                        </div>
                      </div>
                    </div>
                  </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">
                          {#if t.contact}
                            <a
                              href="../contacts/{t.contact.id}"
                              class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">{t.contact.firstname}
                              {t.contact.middlename || ''}
                              {t.contact.lastname}</a>
                          {:else}{$_('no-contact-specified')}{/if}
                        </div>
                      </div>
                    </div>
                  </td>
                  {#if active_deletes[t.id] === true}
                    <td
                      class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
                      <button
                        on:click={() => {
                          active_deletes[t.id] = false;
                        }}
                        tabindex="0"
                        class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer">Cancel
                        Delete</button>
                      <button
                        on:click={() => {
                          RunnerTeamService.runnerTeamControllerRemove(t.id, false)
                            .then((resp) => {
                              current_teams = current_teams.filter((obj) => obj.id !== t.id);
                              Toastify({
                                text: $_('organization-deleted'),
                                duration: 500,
                                backgroundColor:
                                  'linear-gradient(to right, #00b09b, #96c93d)',
                              }).showToast();
                            })
                            .catch((err) => {
                              modal_open = true;
                              delete_team = t;
                            });
                        }}
                        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="./{t.id}"
                        class="text-indigo-600 hover:text-indigo-900">{$_('details')}</a>
                      {#if store.state.jwtinfo.userdetails.permissions.includes('TEAM:DELETE')}
                        <button
                          on:click={() => {
                            active_deletes[t.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}
