{% load static %}
<!-- Set External Reference -->
<dialog
  id="generic_set_external_reference_modal"
  class="modal"
  x-data="{
    isSubmitting: false,
    selectedDatabase: '',
    placeholder: '',

    reset() {
      this.isSubmitting = false;
      this.selectedDatabase = '';
      this.placeholder = '';
    },

    updatePlaceholder() {
      if (this.selectedDatabase) {
        const option = document.querySelector('#database-select option[value=\'' + this.selectedDatabase + '\']');
        if (option) {
          this.placeholder = option.dataset.inputPlaceholder || '';
        }
      }
    },

    submit(formId) {
      const form = document.getElementById(formId);
      if (form && form.checkValidity()) {
        this.isSubmitting = true;
        form.submit();
      } else if (form) {
        form.reportValidity();
      }
    }
  }"
  @close="reset()"
>
  <div class="modal-box">
    <!-- Header -->
    <h3 class="text-lg font-bold">Add External References</h3>

    <!-- Close button (X) -->
    <form method="dialog">
      <button
        class="btn btn-sm btn-circle btn-ghost absolute top-2 right-2"
        :disabled="isSubmitting"
      >
        ✕
      </button>
    </form>

    <!-- Body -->
    <div class="py-4">
      <form
        id="generic-set-external-reference-modal-form"
        accept-charset="UTF-8"
        action="{{ current_object.url }}"
        method="post"
      >
        {% csrf_token %}
        <div class="form-control">
          <label class="label" for="database-select">
            <span class="label-text">
              Select the Database you want to attach an External Reference for
            </span>
          </label>
          <select
            id="database-select"
            name="selected-database"
            class="select select-bordered w-full"
            x-model="selectedDatabase"
            @change="updatePlaceholder()"
            required
          >
            <option value="" disabled selected>Select Database</option>
            {% for entity, databases in meta.external_databases.items %}
              {% if entity == object_type %}
                {% for db in databases %}
                  <option
                    value="{{ db.database.id }}"
                    data-input-placeholder="{{ db.placeholder }}"
                  >
                    {{ db.database.name|safe }}
                  </option>
                {% endfor %}
              {% endif %}
            {% endfor %}
          </select>
        </div>

        <div class="form-control mt-4" x-show="selectedDatabase" x-cloak>
          <label class="label" for="identifier">
            <span class="label-text">The reference</span>
          </label>
          <input
            type="text"
            id="identifier"
            name="identifier"
            class="input input-bordered w-full"
            :placeholder="placeholder"
            required
          />
        </div>
      </form>
    </div>

    <!-- Footer -->
    <div class="modal-action">
      <button
        type="button"
        class="btn"
        onclick="this.closest('dialog').close()"
        :disabled="isSubmitting"
      >
        Close
      </button>
      <button
        type="button"
        class="btn btn-primary"
        @click="submit('generic-set-external-reference-modal-form')"
        :disabled="isSubmitting"
      >
        <span x-show="!isSubmitting">Submit</span>
        <span
          x-show="isSubmitting"
          class="loading loading-spinner loading-sm"
        ></span>
        <span x-show="isSubmitting">Submitting...</span>
      </button>
    </div>
  </div>

  <!-- Backdrop -->
  <form method="dialog" class="modal-backdrop">
    <button :disabled="isSubmitting">close</button>
  </form>
</dialog>
