<template>
  <button
    v-if="dados?.acao"
    type="button"
    class="eli-tabela__celula-link"
    @click.stop.prevent="dados.acao()"
  >
    {{ textoData }}
  </button>

  <span v-else>{{ textoData }}</span>
</template>

<script lang="ts">
import { computed, defineComponent, PropType } from "vue";
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";

import type { tiposTabelaCelulas } from "./tiposTabelaCelulas";

// Necessário para `fromNow()`.
dayjs.extend(relativeTime);

export default defineComponent({
  name: "EliTabelaCelulaData",
  props: {
    dados: {
      type: Object as PropType<tiposTabelaCelulas["data"]>,
      required: false,
    },
  },
  setup({ dados }) {
    const textoData = computed(() => {
      const valorIso = dados?.valor;
      if (!valorIso) return "";

      const formato = dados?.formato ?? "data";

      if (formato === "relativo") {
        return dayjs(valorIso).fromNow();
      }

      if (formato === "data_hora") {
        // Padrão pt-BR simples (sem depender de locale do dayjs)
        return dayjs(valorIso).format("DD/MM/YYYY HH:mm");
      }

      // formato === "data"
      return dayjs(valorIso).format("DD/MM/YYYY");
    });

    return { dados, textoData };
  },
});
</script>

<style>
.eli-tabela__celula-link {
  all: unset;
  display: inline;
  color: #2563eb;
  cursor: pointer;
  text-decoration: underline;
  text-decoration-color: rgba(37, 99, 235, 0.55);
  text-underline-offset: 2px;
}

.eli-tabela__celula-link:hover {
  color: #1d4ed8;
  text-decoration-color: rgba(29, 78, 216, 0.75);
}

.eli-tabela__celula-link:focus-visible {
  outline: 2px solid rgba(37, 99, 235, 0.45);
  outline-offset: 2px;
  border-radius: 4px;
}
</style>