<script setup lang="ts">
import type { S3Key } from "@/client/s3proxy";
import { reactive, watch } from "vue";
import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
import DeleteModal from "@/components/modals/DeleteModal.vue";
import { environment } from "@/environment";
import CopyToClipboardIcon from "@/components/CopyToClipboardIcon.vue";

const props = defineProps<{
  s3key: S3Key;
  deletable: boolean;
  loading: boolean;
}>();

const emit = defineEmits<{
  (e: "delete-key", accessKey: string): void;
}>();

watch(
  () => props.s3key.access_key,
  () => {
    visibleKeys.secret = false;
    visibleKeys.access = false;
  },
);
const visibleKeys = reactive<{
  secret: boolean;
  access: boolean;
}>({
  secret: false,
  access: false,
});

function deleteKeyTrigger() {
  if (props.deletable) {
    emit("delete-key", props.s3key.access_key);
  }
}
</script>

<template>
  <DeleteModal
    modalID="delete-key-modal"
    :object-name-delete="props.s3key.access_key.slice(0, 5) + '...'"
    :back-modal-id="undefined"
    @confirm-delete="deleteKeyTrigger"
  />
  <h3>S3 Endpoint:</h3>
  <div class="fs-4 mb-4">{{ environment.S3_URL }}</div>
  <h3>Access Key:</h3>
  <div v-if="props.loading" class="placeholder-glow">
    <span class="placeholder col-5 mt-3 mb-2 fs-4"></span><br />
  </div>
  <div v-else class="input-group mb-2">
    <span
      class="input-group-text cursor-pointer"
      @click="visibleKeys.access = !visibleKeys.access"
    >
      <font-awesome-icon
        :icon="visibleKeys.access ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'"
      />
    </span>
    <input
      class="form-control"
      :type="visibleKeys.access ? 'text' : 'password'"
      :value="props.s3key.access_key"
      aria-label="S3 Access Key"
      readonly
    />
    <span class="input-group-text" id="s3-secret-key-copy"
      ><copy-to-clipboard-icon :text="props.s3key.access_key"
    /></span>
  </div>
  <h3>Secret Key:</h3>
  <div v-if="props.loading" class="placeholder-glow">
    <span class="placeholder col-7 mt-3 mb-4 fs-4"></span><br />
  </div>
  <div v-else class="input-group fs-4 mb-3">
    <span
      class="input-group-text cursor-pointer"
      @click="visibleKeys.secret = !visibleKeys.secret"
    >
      <font-awesome-icon
        :icon="visibleKeys.secret ? 'fa-solid fa-eye' : 'fa-solid fa-eye-slash'"
      />
    </span>
    <input
      id="s3-secret-key"
      class="form-control"
      :type="visibleKeys.secret ? 'text' : 'password'"
      :value="props.s3key.secret_key"
      aria-label="S3 Access Key"
      readonly
    />
    <span class="input-group-text" id="s3-secret-key-copy"
      ><copy-to-clipboard-icon :text="props.s3key.secret_key"
    /></span>
  </div>
  <button
    type="button"
    class="btn btn-danger fs-5"
    :disabled="!props.deletable || props.loading"
    data-bs-toggle="modal"
    data-bs-target="#delete-key-modal"
  >
    Delete
  </button>
</template>

<style scoped></style>