import { defineStore } from 'pinia'
import { ref } from 'vue'
import { useApi } from '../composables/useApi.js'

export const useAllowlistStore = defineStore('allowlist', () => {
  const api = useApi()
  const rows = ref([])
  const loading = ref(false)

  async function load() {
    loading.value = true
    try { rows.value = await api.get('/api/allowlist') }
    finally { loading.value = false }
  }

  async function updateThreshold(tagId, minConfidence) {
    await api.patch(`/api/tags/${tagId}/allowlist`, {
      body: { min_confidence: minConfidence }
    })
    const r = rows.value.find(x => x.tag_id === tagId)
    if (r) {
      r.min_confidence = minConfidence
      // The committed threshold changed the covered pool — refresh the row's
      // coverage so the table stays truthful after a save.
      try { r.coverage_count = (await coverage(tagId, minConfidence)).count }
      catch { /* leave the stale count rather than blank it */ }
    }
  }

  // Live "at threshold T, a sweep would cover ~N images" projection for the
  // tuning dashboard. Returns { count, threshold }.
  async function coverage(tagId, threshold) {
    return api.get(`/api/tags/${tagId}/allowlist/coverage`, {
      params: { threshold }
    })
  }

  async function remove(tagId) {
    await api.delete(`/api/tags/${tagId}/allowlist`)
    rows.value = rows.value.filter(x => x.tag_id !== tagId)
  }

  return { rows, loading, load, updateThreshold, coverage, remove }
})
