<script>
  import { _ } from "svelte-i18n";
  import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
  let modal_open = false;
  let delete_org = {};
  import { RunnerOrganizationService } from "@odit/lfk-client-js";
  import store from "../../store";
  import OrgsEmptyState from "./OrgsEmptyState.svelte";
  import ConfirmOrgDeletion from "./ConfirmOrgDeletion.svelte";
  import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
  import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
  import toast from "svelte-french-toast";
  $: searchvalue = "";
  $: active_deletes = [];
  $: sponsoring_contracts_show = current_organizations.some(
    (r) => r.is_selected === true
  );
  $: cards_show = current_organizations.some((r) => r.is_selected === true);
  $: generate_orgs = current_organizations.filter(
    (r) => r.is_selected === true
  );
  $: certificates_show = current_organizations.some(
    (r) => r.is_selected === true
  );
  export let current_organizations = [];

  const promise =
    RunnerOrganizationService.runnerOrganizationControllerGetAll().then(
      (val) => {
        current_organizations = val;
      }
    );
</script>

<ConfirmOrgDeletion
  on:cancelDelete={(event) => {
    modal_open = false;
    active_deletes[event.detail.id] = false;
  }}
  bind:modal_open
  bind:delete_org
/>
{#if store.state.jwtinfo.userdetails.permissions.includes("ORGANIZATION:GET")}
  {#await 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">{$_("organizations-are-being-loaded")}</p>
      <p class="text-sm">{$_("this-might-take-a-moment")}</p>
    </div>
  {:then}
    {#if current_organizations.length === 0}
      <OrgsEmptyState />
    {:else}
      <input
        type="search"
        bind:value={searchvalue}
        placeholder={$_("datatable.search")}
        aria-label={$_("datatable.search")}
        class="mb-4"
      />
      <div class="h-12">
        <GenerateSponsoringContracts
          bind:sponsoring_contracts_show
          bind:generate_orgs
        />
        <GenerateRunnerCards bind:cards_show bind:generate_orgs />
        <GenerateRunnerCertificates bind:certificates_show bind:generate_orgs />
      </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 class="odd:bg-white even:bg-gray-100">
              <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_organizations.some(
                      (r) => r.is_selected === true
                    );
                    current_organizations = current_organizations.map((r) => {
                      r.is_selected = newstate;
                      return r;
                    });
                  }}
                  class="underline cursor-pointer select-none"
                  >{#if current_organizations.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"
              >
                {$_("address")}
              </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_organizations as o}
              {#if Object.values(o)
                .toString()
                .toLowerCase()
                .includes(searchvalue)}
                <tr data-rowid="org_{o.id}">
                  <td class="px-6 py-4 whitespace-nowrap">
                    <input
                      bind:checked={o.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">
                          {o.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 o.address.address1 !== null}
                            {o.address.address1}<br />
                            <!-- {o.address.address2 || ''}<br /> -->
                            {o.address.postalcode}
                            {o.address.city}
                            {o.address.country}
                          {/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 o.contact}
                            <a
                              href="../contacts/{o.contact.id}"
                              class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800"
                              >{o.contact.firstname}
                              {o.contact.middlename || ""}
                              {o.contact.lastname}</a
                            >
                          {:else}{$_("no-contact-specified")}{/if}
                        </div>
                      </div>
                    </div>
                  </td>
                  {#if active_deletes[o.id] === true}
                    <td
                      class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium"
                    >
                      <button
                        on:click={() => {
                          active_deletes[o.id] = false;
                        }}
                        tabindex="0"
                        class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer"
                        >{$_("cancel-delete")}</button
                      >
                      <button
                        on:click={() => {
                          toast.loading($_("deleting-organization"));
                          RunnerOrganizationService.runnerOrganizationControllerRemove(
                            o.id,
                            false
                          )
                            .then((resp) => {
                              current_organizations =
                                current_organizations.filter(
                                  (obj) => obj.id !== o.id
                                );
                              toast($_("organization-deleted"));
                            })
                            .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="./{o.id}"
                        class="text-indigo-600 hover:text-indigo-900"
                        >{$_("details")}</a
                      >
                      {#if store.state.jwtinfo.userdetails.permissions.includes("ORGANIZATION:DELETE")}
                        <button
                          on:click={() => {
                            active_deletes[o.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}
