import { ref } from 'vue' import { useApiClient } from '@/composables/useApiClient' interface ApiWrappedResponse { message?: string data?: T } interface GoogleSheetsStatusData { connected: boolean email?: string } interface GoogleSheetsConnectData { auth_url: string } interface GoogleSheetsDisconnectData { success: boolean } const isConnected = ref(false) const isConnecting = ref(false) const isDisconnecting = ref(false) const isInitialized = ref(false) const accountEmail = ref('') export const useGoogleSheetsConnection = () => { const { request } = useApiClient() const resetConnectUiState = () => { isConnecting.value = false } const checkConnectionStatus = async () => { resetConnectUiState() const { data, error } = await request>( 'integrations/google-sheets/status', { method: 'GET' }, ) if (error) { isInitialized.value = true return } const payload = data?.data if (payload) { isConnected.value = payload.connected accountEmail.value = payload.email || '' isInitialized.value = true } } const connectGoogleSheets = async (): Promise<{ success: boolean errorMessage: string | null }> => { isConnecting.value = true const { data, error } = await request>( 'integrations/google-sheets/connect', { method: 'POST' }, ) if (data?.data?.auth_url) { window.location.href = data.data.auth_url return { success: true, errorMessage: null } } isConnecting.value = false const apiMessage = typeof error === 'object' && error !== null && 'message' in error && typeof (error as { message?: string }).message === 'string' ? (error as { message: string }).message : null return { success: false, errorMessage: apiMessage } } const disconnectGoogleSheets = async () => { isDisconnecting.value = true const { data } = await request>( 'integrations/google-sheets/disconnect', { method: 'POST' }, ) isDisconnecting.value = false if (data?.data?.success) { isConnected.value = false accountEmail.value = '' resetConnectUiState() } } return { isConnected, isConnecting, isDisconnecting, isInitialized, accountEmail, checkConnectionStatus, connectGoogleSheets, disconnectGoogleSheets, resetConnectUiState, } }