'use client'

import { useState, useEffect, useCallback } from 'react'

export interface WebhookToken {
  id: string
  name: string
  prefix: string
  enabled: boolean
  createdAt: string
}

export function useWebhookTokens() {
  const [tokens, setTokens] = useState<WebhookToken[]>([])
  const [loading, setLoading] = useState(true)

  const fetchTokens = useCallback(async () => {
    try {
      const res = await fetch('/api/webhook-tokens')
      if (res.ok) {
        const data = await res.json()
        setTokens(data)
      }
    } catch (err) {
      console.error('Failed to fetch webhook tokens:', err)
    } finally {
      setLoading(false)
    }
  }, [])

  useEffect(() => { fetchTokens() }, [fetchTokens])

  const createToken = useCallback(async (name: string): Promise<string | null> => {
    const res = await fetch('/api/webhook-tokens', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name }),
    })
    if (!res.ok) return null
    const data = await res.json()
    await fetchTokens()
    return data.token as string
  }, [fetchTokens])

  const deleteToken = useCallback(async (id: string) => {
    const res = await fetch(`/api/webhook-tokens/${id}`, { method: 'DELETE' })
    if (res.ok) await fetchTokens()
  }, [fetchTokens])

  const toggleToken = useCallback(async (id: string, enabled: boolean) => {
    const res = await fetch(`/api/webhook-tokens/${id}`, {
      method: 'PATCH',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ enabled }),
    })
    if (res.ok) await fetchTokens()
  }, [fetchTokens])

  return { tokens, loading, createToken, deleteToken, toggleToken, refreshTokens: fetchTokens }
}
