<script lang="ts">
  import { useConvexClient } from "convex-svelte";
  import { api } from "@sgse-app/backend/convex/_generated/api";
  import type { Id } from "@sgse-app/backend/convex/_generated/dataModel";
  import { onMount } from "svelte";

  const client = useConvexClient();
  let isLoading = true;
  let list: Array<any> = [];
  let filtroNome = "";
  let filtroTipo: "" | "cargo_comissionado" | "funcao_gratificada" = "";
  let filtroDescricao = "";
  let filtered: Array<any> = [];
  let notice: { kind: "success" | "error"; text: string } | null = null;
  $: needsScroll = filtered.length > 8;
  let openMenuId: string | null = null;
  function toggleMenu(id: string) {
    openMenuId = openMenuId === id ? null : id;
  }
  $: filtered = (list ?? []).filter((s) => {
    const nome = (filtroNome || "").toLowerCase();
    const desc = (filtroDescricao || "").toLowerCase();
    const okNome = !nome || (s.nome || "").toLowerCase().includes(nome);
    const okDesc = !desc || (s.descricao || "").toLowerCase().includes(desc);
    const okTipo = !filtroTipo || s.tipo === filtroTipo;
    return okNome && okDesc && okTipo;
  });
  onMount(async () => {
    try {
      list = await client.query(api.simbolos.getAll, {} as any);
    } finally {
      isLoading = false;
    }
  });

  let deletingId: Id<"simbolos"> | null = null;
  let simboloToDelete: { id: Id<"simbolos">; nome: string } | null = null;

  function openDeleteModal(id: Id<"simbolos">, nome: string) {
    simboloToDelete = { id, nome };
    (document.getElementById("delete_modal") as HTMLDialogElement)?.showModal();
  }

  function closeDeleteModal() {
    simboloToDelete = null;
    (document.getElementById("delete_modal") as HTMLDialogElement)?.close();
  }

  async function confirmDelete() {
    if (!simboloToDelete) return;
    try {
      deletingId = simboloToDelete.id;
      await client.mutation(api.simbolos.remove, { id: simboloToDelete.id });
      // reload list
      list = await client.query(api.simbolos.getAll, {} as any);
      notice = { kind: "success", text: "Símbolo excluído com sucesso." };
      closeDeleteModal();
    } catch (error) {
      notice = { kind: "error", text: "Erro ao excluir símbolo." };
    } finally {
      deletingId = null;
    }
  }

  function formatMoney(value: string) {
    const num = parseFloat(value);
    if (isNaN(num)) return "R$ 0,00";
    return `R$ ${num.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
  }

  function getTipoLabel(tipo: string) {
    return tipo === "cargo_comissionado" ? "Cargo Comissionado" : "Função Gratificada";
  }
</script>

<main class="container mx-auto px-4 py-4">
  <!-- Breadcrumb -->
  <div class="text-sm breadcrumbs mb-4">
    <ul>
      <li><a href="/recursos-humanos" class="text-primary hover:underline">Recursos Humanos</a></li>
      <li>Símbolos</li>
    </ul>
  </div>

  <!-- Cabeçalho -->
  <div class="mb-6">
    <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
      <div class="flex items-center gap-4">
        <div class="p-3 bg-green-500/20 rounded-xl">
          <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z" />
          </svg>
        </div>
        <div>
          <h1 class="text-3xl font-bold text-primary">Símbolos Cadastrados</h1>
          <p class="text-base-content/70">Gerencie cargos comissionados e funções gratificadas</p>
        </div>
      </div>
      <a href="/recursos-humanos/simbolos/cadastro" class="btn btn-primary btn-lg gap-2">
        <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
          <path fill-rule="evenodd" d="M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z" clip-rule="evenodd" />
        </svg>
        Novo Símbolo
      </a>
    </div>
  </div>

  <!-- Alertas -->
  {#if notice}
    <div class="alert mb-6 shadow-lg" class:alert-success={notice.kind === "success"} class:alert-error={notice.kind === "error"}>
      <svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
        {#if notice.kind === "success"}
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
        {:else}
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
        {/if}
      </svg>
      <span>{notice.text}</span>
    </div>
  {/if}

  <!-- Filtros -->
  <div class="card bg-base-100 shadow-xl mb-6">
    <div class="card-body">
      <h2 class="card-title text-lg mb-4">
        <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" />
        </svg>
        Filtros de Pesquisa
      </h2>
      <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
        <div class="form-control">
          <label class="label" for="symbol_nome">
            <span class="label-text font-semibold">Nome do Símbolo</span>
          </label>
          <input 
            id="symbol_nome" 
            class="input input-bordered focus:input-primary" 
            placeholder="Buscar por nome..."
            bind:value={filtroNome} 
          />
        </div>
        <div class="form-control">
          <label class="label" for="symbol_tipo">
            <span class="label-text font-semibold">Tipo</span>
          </label>
          <select id="symbol_tipo" class="select select-bordered focus:select-primary" bind:value={filtroTipo}>
            <option value="">Todos os tipos</option>
            <option value="cargo_comissionado">Cargo Comissionado</option>
            <option value="funcao_gratificada">Função Gratificada</option>
          </select>
        </div>
        <div class="form-control">
          <label class="label" for="symbol_desc">
            <span class="label-text font-semibold">Descrição</span>
          </label>
          <input 
            id="symbol_desc" 
            class="input input-bordered focus:input-primary" 
            placeholder="Buscar na descrição..."
            bind:value={filtroDescricao} 
          />
        </div>
      </div>
      {#if filtroNome || filtroTipo || filtroDescricao}
        <div class="mt-4">
          <button 
            class="btn btn-ghost btn-sm gap-2"
            onclick={() => {
              filtroNome = "";
              filtroTipo = "";
              filtroDescricao = "";
            }}
          >
            <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
            </svg>
            Limpar Filtros
          </button>
        </div>
      {/if}
    </div>
  </div>

  {#if isLoading}
    <div class="flex justify-center items-center py-12">
      <span class="loading loading-spinner loading-lg"></span>
    </div>
  {:else}
    <!-- Tabela de Símbolos -->
    <div class="card bg-base-100 shadow-xl">
      <div class="card-body p-0">
        <div class="overflow-x-auto">
          <div class="overflow-y-auto" style="max-height: {filtered.length > 8 ? '600px' : 'none'};">
            <table class="table table-zebra w-full">
              <thead class="sticky top-0 bg-base-200 z-10">
                <tr>
                  <th class="font-bold">Nome</th>
                  <th class="font-bold">Tipo</th>
                  <th class="font-bold">Valor Referência</th>
                  <th class="font-bold">Valor Vencimento</th>
                  <th class="font-bold">Valor Total</th>
                  <th class="font-bold">Descrição</th>
                  <th class="text-right font-bold">Ações</th>
                </tr>
              </thead>
              <tbody>
                {#if filtered.length > 0}
                  {#each filtered as simbolo}
                    <tr class="hover">
                      <td class="font-medium">{simbolo.nome}</td>
                      <td>
                        <span
                          class="badge"
                          class:badge-primary={simbolo.tipo === "cargo_comissionado"}
                          class:badge-secondary={simbolo.tipo === "funcao_gratificada"}
                        >
                          {getTipoLabel(simbolo.tipo)}
                        </span>
                      </td>
                      <td>{simbolo.repValor ? formatMoney(simbolo.repValor) : "—"}</td>
                      <td>{simbolo.vencValor ? formatMoney(simbolo.vencValor) : "—"}</td>
                      <td class="font-semibold">{formatMoney(simbolo.valor)}</td>
                      <td class="max-w-xs truncate">{simbolo.descricao}</td>
                      <td class="text-right">
                <div class="dropdown dropdown-end" class:dropdown-open={openMenuId === simbolo._id}>
                  <button type="button" class="btn btn-ghost btn-sm" onclick={() => toggleMenu(simbolo._id)}>
                    <svg
                      xmlns="http://www.w3.org/2000/svg"
                      class="h-5 w-5"
                      viewBox="0 0 20 20"
                      fill="currentColor"
                    >
                      <path
                        d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z"
                      />
                    </svg>
                  </button>
                  <ul class="dropdown-content menu bg-base-100 rounded-box z-10 w-52 p-2 shadow-lg border border-base-300">
                    <li>
                      <a href={"/recursos-humanos/simbolos/" + simbolo._id + "/editar"}>
                        <svg
                          xmlns="http://www.w3.org/2000/svg"
                          class="h-4 w-4"
                          viewBox="0 0 20 20"
                          fill="currentColor"
                        >
                          <path
                            d="M13.586 3.586a2 2 0 112.828 2.828l-.793.793-2.828-2.828.793-.793zM11.379 5.793L3 14.172V17h2.828l8.38-8.379-2.83-2.828z"
                          />
                        </svg>
                        Editar
                      </a>
                    </li>
                    <li>
                      <button type="button" onclick={() => openDeleteModal(simbolo._id, simbolo.nome)} class="text-error">
                        <svg
                          xmlns="http://www.w3.org/2000/svg"
                          class="h-4 w-4"
                          viewBox="0 0 20 20"
                          fill="currentColor"
                        >
                          <path
                            fill-rule="evenodd"
                            d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z"
                            clip-rule="evenodd"
                          />
                        </svg>
                        Excluir
                      </button>
                    </li>
                  </ul>
                        </div>
                      </td>
                    </tr>
                  {/each}
                {:else}
                  <tr>
                    <td colspan="7" class="text-center opacity-70 py-8">Nenhum símbolo encontrado com os filtros atuais.</td>
                  </tr>
                {/if}
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </div>
    
    <!-- Informação sobre resultados -->
    <div class="mt-4 text-sm text-base-content/70 text-center">
      Exibindo {filtered.length} de {list.length} símbolo(s)
    </div>
  {/if}
</main>

<!-- Modal de Confirmação de Exclusão -->
<dialog id="delete_modal" class="modal">
  <div class="modal-box">
    <h3 class="font-bold text-lg mb-4">Confirmar Exclusão</h3>
    <div class="alert alert-warning mb-4">
      <svg
        xmlns="http://www.w3.org/2000/svg"
        class="stroke-current shrink-0 h-6 w-6"
        fill="none"
        viewBox="0 0 24 24"
      >
        <path
          stroke-linecap="round"
          stroke-linejoin="round"
          stroke-width="2"
          d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
        />
      </svg>
      <span>Esta ação não pode ser desfeita!</span>
    </div>
    {#if simboloToDelete}
      <p class="py-2">
        Tem certeza que deseja excluir o símbolo <strong class="text-error"
          >{simboloToDelete.nome}</strong
        >?
      </p>
    {/if}
    <div class="modal-action">
      <form method="dialog" class="flex gap-2">
        <button class="btn btn-ghost" onclick={closeDeleteModal} type="button">
          Cancelar
        </button>
        <button
          class="btn btn-error"
          onclick={confirmDelete}
          disabled={deletingId !== null}
          type="button"
        >
          {#if deletingId}
            <span class="loading loading-spinner loading-sm"></span>
            Excluindo...
          {:else}
            <svg
              xmlns="http://www.w3.org/2000/svg"
              class="h-5 w-5"
              viewBox="0 0 20 20"
              fill="currentColor"
            >
              <path
                fill-rule="evenodd"
                d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z"
                clip-rule="evenodd"
              />
            </svg>
            Confirmar Exclusão
          {/if}
        </button>
      </form>
    </div>
  </div>
  <form method="dialog" class="modal-backdrop">
    <button>close</button>
  </form>
</dialog>
