<script setup lang="ts">
import type { S3Key } from "@/client/s3proxy";
import type { Ref } from "vue";
import { ref, watch } from "vue";
import BootstrapIcon from "@/components/BootstrapIcon.vue";
import DeleteModal from "@/components/modals/DeleteModal.vue";

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

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

watch(
  () => props.s3key.access_key,
  () => {
    visibleSecret.value = false;
  }
);

const visibleSecret: Ref<boolean> = ref(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"
    :back-modal-id="undefined"
    @confirm-delete="deleteKeyTrigger"
  />
  <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>
  <input
    v-else
    class="form-control-plaintext text-white fs-4"
    type="text"
    :value="props.s3key.access_key"
    aria-label="S3 Access Key"
    readonly
  />
  <div class="d-flex align-items-center">
    <span class="fs-3">Secret Key:</span>
    <button
      class="btn btn-outline-secondary ms-3"
      :class="{ active: visibleSecret }"
      data-bs-toggle="button"
      :disabled="props.loading"
      @click="visibleSecret = !visibleSecret"
    >
      <bootstrap-icon
        :width="18"
        :height="18"
        fill="white"
        :icon="visibleSecret ? 'eye' : 'eye-slash'"
      />
    </button>
  </div>
  <div v-if="props.loading" class="placeholder-glow">
    <span class="placeholder col-7 mt-3 mb-4 fs-4"></span><br />
  </div>
  <input
    v-else
    id="s3-secret-key"
    class="form-control-plaintext text-white fs-4 mb-3"
    :type="visibleSecret ? 'text' : 'password'"
    :value="props.s3key.secret_key"
    aria-label="S3 Access Key"
    aria-describedby="s3-secret-key"
    readonly
  />
  <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>