import { useState, useCallback } from 'react'
import { invoke } from '@tauri-apps/api/core'

export function useTauriCommand<T extends Record<string, unknown>, R>(
  commandName: string
) {
  const [loading, setLoading] = useState(false)
  const [error, setError] = useState<Error | null>(null)
  
  const execute = useCallback(async (args: T): Promise<R | null> => {
    setLoading(true)
    setError(null)
    
    try {
      const result = await invoke<R>(commandName, args)
      return result
    } catch (err) {
      setError(err as Error)
      console.error(`Command ${commandName} failed:`, err)
      return null
    } finally {
      setLoading(false)
    }
  }, [commandName])
  
  return { execute, loading, error }
}