<template>
  <!-- DoStuffButton — entrée CANONIQUE « Do Stuff » (terme de F, zéro réapprentissage). Réutilisable partout où
       un service/abonnement/appareil est affiché : résout l'appareil (par série, sinon lieu de service, sinon
       client) et OUVRE la vue équipement unique (EquipmentDetail), où vivent signal/débit/actions/VoIP/IPTV.
       Ouvre via la prop openModal si fournie, sinon émet 'navigate' (que la fiche/DetailModal parent gère). -->
  <span class="dostuff-entry">
    <q-btn dense no-caps :flat="flat" :unelevated="!flat" :size="size"
      :color="flat ? 'deep-purple-7' : 'deep-purple-6'" icon="settings_input_antenna"
      :loading="loading" :label="label" @click.stop="openDoStuff">
      <q-tooltip>{{ tooltip }}</q-tooltip>
    </q-btn>
    <span v-if="msg" class="text-caption text-grey-6 q-ml-sm">{{ msg }}</span>
  </span>
</template>

<script setup>
import { ref } from 'vue'
import { useQuasar } from 'quasar'
import { listDocs } from 'src/api/erp'

const props = defineProps({
  // Cibles de résolution (au moins une) — priorité : série exacte > lieu de service > client.
  serial: { type: String, default: '' },
  serviceLocation: { type: String, default: '' },
  customer: { type: String, default: '' },
  // Ouverture : si fournie, on appelle openModal(doctype, name, title) ; sinon on émet 'navigate'.
  openModal: { type: Function, default: null },
  label: { type: String, default: 'Do Stuff' },
  tooltip: { type: String, default: "Ouvre l'appareil : signal, débit, VoIP/IPTV et actions réseau (comme « Do Stuff » de F)" },
  size: { type: String, default: '' },
  flat: { type: Boolean, default: false },
})
const emit = defineEmits(['navigate'])
const $q = useQuasar()
const loading = ref(false)
const msg = ref('')

// Résout l'appareil du service et ouvre sa vue équipement (source unique = Service Equipment).
async function openDoStuff () {
  loading.value = true; msg.value = ''
  try {
    let eqs = []
    const fields = ['name', 'equipment_type', 'status', 'serial_number']
    if (props.serial) eqs = await listDocs('Service Equipment', { filters: { serial_number: props.serial }, fields, limit: 5 })
    if (!eqs.length && props.serviceLocation) eqs = await listDocs('Service Equipment', { filters: { service_location: props.serviceLocation }, fields, limit: 10 })
    if (!eqs.length && props.customer) eqs = await listDocs('Service Equipment', { filters: { customer: props.customer }, fields, limit: 10 })
    if (!eqs.length) { msg.value = 'Aucun appareil lié'; return }
    // Préfère un appareil actif portant une série (l'ONU/le modem principal).
    const active = eqs.filter(e => String(e.status || '').toLowerCase() !== 'retiré')
    const pick = active.find(e => e.serial_number) || active[0] || eqs.find(e => e.serial_number) || eqs[0]
    const title = (pick.equipment_type || 'Appareil') + (pick.serial_number ? ' — ' + pick.serial_number : '')
    if (props.openModal) props.openModal('Service Equipment', pick.name, title)
    else emit('navigate', 'Service Equipment', pick.name, title)
  } catch (e) {
    msg.value = ''
    $q.notify({ type: 'negative', message: 'Do Stuff : ' + (e.message || e) })
  } finally { loading.value = false }
}
</script>
