<template>
  <!-- Shared per-source action cluster (desktop SourceRow + mobile SourceCard).
       Frequent actions stay as buttons; low-frequency / destructive ones move
       into a labelled overflow menu so they can't be mis-clicked, and the
       labels spell out what each one does (recover vs backfill). -->
  <div class="fc-src-actions">
    <v-btn
      icon size="small" variant="text" :loading="checking"
      @click.stop="emit('check', source)"
    >
      <v-icon>mdi-play</v-icon>
      <v-tooltip activator="parent" location="top">
        Check now — fetch posts published since the last check
      </v-tooltip>
    </v-btn>
    <v-btn
      icon size="small" variant="text"
      :color="running ? 'warning' : undefined"
      @click.stop="emit('backfill', source)"
    >
      <v-icon>{{ running ? 'mdi-stop' : 'mdi-magnify-scan' }}</v-icon>
      <v-tooltip activator="parent" location="top">
        {{ running
          ? (recovering ? 'Stop recovery' : (recapturing ? 'Stop recapture' : 'Stop backfill'))
          : 'Backfill — one-time walk of the FULL post history until complete' }}
      </v-tooltip>
    </v-btn>

    <KebabMenu size="small" :min-width="260" label="More actions">
      <v-list-item
        v-if="isNative && !running"
        prepend-icon="mdi-backup-restore"
        @click="emit('recover', source)"
      >
        <v-list-item-title>Recover dropped near-duplicates</v-list-item-title>
        <v-list-item-subtitle>
          Re-fetch images previously dropped as near-dups and re-judge them
          under the current similarity threshold
        </v-list-item-subtitle>
      </v-list-item>
      <v-list-item
        v-if="isNative && !running"
        prepend-icon="mdi-text-box-search-outline"
        @click="emit('recapture', source)"
      >
        <v-list-item-title>Recapture post text &amp; links</v-list-item-title>
        <v-list-item-subtitle>
          Re-grab every post's body + external links and localize inline images
          already on disk — without re-downloading media
        </v-list-item-subtitle>
      </v-list-item>
      <v-divider v-if="isNative && !running" />
      <v-list-item
        base-color="error"
        prepend-icon="mdi-delete-outline"
        @click="emit('remove', source)"
      >
        <v-list-item-title>Remove source</v-list-item-title>
      </v-list-item>
    </KebabMenu>
  </div>
</template>

<script setup>
import { computed } from 'vue'
import KebabMenu from '../common/KebabMenu.vue'

const props = defineProps({
  source: { type: Object, required: true },
  checking: { type: Boolean, default: false },
})
const emit = defineEmits(['check', 'backfill', 'recover', 'recapture', 'remove'])

const running = computed(() => props.source.backfill_state === 'running')
const recovering = computed(() => !!props.source.backfill_bypass_seen)
const recapturing = computed(() => !!props.source.backfill_recapture)
// Recover / recapture are native-ingester features (ledger-bypass re-walk and
// post-text re-grab), available to every native platform — not just Patreon.
// Mirrors backend download_backends.NATIVE_INGESTER_PLATFORMS.
const NATIVE_PLATFORMS = ['patreon', 'subscribestar', 'pixiv']
const isNative = computed(() => NATIVE_PLATFORMS.includes(props.source.platform))
</script>

<style scoped>
.fc-src-actions {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
</style>
