<template>
  <div class="card bg-base-200 p-8 sm:p-12">
    <div class="flex flex-col items-center text-center gap-4">
      <div class="w-16 h-16 rounded-full bg-base-300 flex items-center justify-center">
        <slot name="icon">
          <svg class="w-8 h-8 text-base-content/40" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"/>
          </svg>
        </slot>
      </div>
      <div class="space-y-2">
        <h3 class="text-lg font-semibold text-base-content">{{ title }}</h3>
        <p v-if="description" class="text-base-content/70 max-w-md">{{ description }}</p>
      </div>
      <div v-if="actionLabel" class="mt-2">
        <NuxtLink v-if="actionTo" :to="actionTo">
          <button class="btn btn-primary gap-2">
            <Icon v-if="actionIcon" :name="actionIcon" size="18" />
            <svg v-else class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
            </svg>
            {{ actionLabel }}
          </button>
        </NuxtLink>
        <button v-else class="btn btn-primary gap-2" @click="$emit('action')">
          <Icon v-if="actionIcon" :name="actionIcon" size="18" />
          <svg v-else class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
          </svg>
          {{ actionLabel }}
        </button>
      </div>
      <slot />
    </div>
  </div>
</template>

<script setup lang="ts">
defineProps<{
  title: string
  description?: string
  actionLabel?: string
  actionTo?: string
  actionIcon?: string
}>()

defineEmits<{
  (e: 'action'): void
}>()
</script>
