import { ref } from 'vue'
import { Notify } from 'quasar'
import { createDoc } from 'src/api/erp'

// Softphone PARTAGÉ (Twilio WebRTC + repli SIP) — état singleton pilotable de n'importe où (ConversationPanel, fiche client…).
// Le dialer lui-même = <PhoneModal> monté UNE seule fois globalement (MainLayout) et lié à cet état. Remplace l'ancien
// montage exclusif dans ChatterPanel → l'appel intégré existe maintenant dans le panneau de comms unifié.
const open = ref(false)
const number = ref('')
const customer = ref('')       // nom ERPNext (C-…) pour lier le log d'appel à la bonne fiche
const customerName = ref('')   // nom affiché dans le dialer
const provider = ref('twilio')

// Ouvre le dialer pré-rempli + (si fournie) la fiche à laquelle lier le log d'appel.
function call (num, ctx = {}) {
  number.value = String(num || '').trim()
  customer.value = ctx.customer || ''
  customerName.value = ctx.customerName || ''
  provider.value = ctx.provider || 'twilio'
  open.value = true
}

// Log d'appel = créateur UNIQUE (corrige l'ancien double-log PhoneModal+ChatterPanel) : un seul doc Communication par appel.
async function handleCallEnded (info) {
  const phone = (info && info.remote) || number.value
  if (!customer.value || !phone) return // pas de fiche liée → on ne crée pas de Communication orpheline
  const dur = (info && info.duration) || 0
  const durationStr = `${Math.floor(dur / 60)}m${String(dur % 60).padStart(2, '0')}s`
  const incoming = info && info.direction === 'in'
  try {
    await createDoc('Communication', {
      subject: (incoming ? 'Appel de ' : 'Appel vers ') + phone,
      communication_type: 'Communication', communication_medium: 'Phone',
      sent_or_received: incoming ? 'Received' : 'Sent',
      status: 'Linked', phone_no: phone, sender: 'sms@gigafibre.ca',
      sender_full_name: incoming ? ((info && info.remoteName) || phone) : 'Targo Ops',
      content: `Appel ${incoming ? 'reçu de' : 'vers'} ${phone} — Durée: ${durationStr}`,
      reference_doctype: 'Customer', reference_name: customer.value,
    })
  } catch (e) { Notify.create({ type: 'negative', message: 'Erreur enregistrement appel : ' + (e.message || e), timeout: 3000 }) }
}

export function useSoftphone () { return { open, number, customer, customerName, provider, call, handleCallEnded } }
