import supabase from './supabase'; interface UserConfiguration { user_id: number; configuration: object; created_at: string; updated_at: string; pinned_hololive_streams: string[]; } interface NewUserConfiguration { configuration: object; updated_at?: string; pinned_hololive_streams?: string[]; } export const getUserConfiguration = async (userId: number) => { const { data, error } = await supabase .from('user_configuration') .select('*') .eq('user_id', userId); if (error || data.length === 0 || data[0].user_id !== userId) return null; return data[0] as UserConfiguration; }; export const setUserConfiguration = async (userId: number, configuration: NewUserConfiguration) => { const userConfiguration = await getUserConfiguration(userId); const { data, error } = await supabase .from('user_configuration') .upsert( { user_id: userId, configuration: configuration.configuration, updated_at: configuration.updated_at || new Date().toISOString(), pinned_hololive_streams: configuration.pinned_hololive_streams || (userConfiguration ? userConfiguration.pinned_hololive_streams : []) }, { onConflict: 'user_id' } ) .select(); if (error || !data || (data as []).length === 0) return null; return data[0].configuration as UserConfiguration; }; export const toggleHololiveStreamPinning = async (userId: number, streamId: string) => { const userConfiguration = await getUserConfiguration(userId); if (!userConfiguration) return null; const pinnedStreams = userConfiguration.pinned_hololive_streams; const index = pinnedStreams.indexOf(streamId); if (index === -1) pinnedStreams.push(streamId); else pinnedStreams.splice(index, 1); return setUserConfiguration(userId, { configuration: userConfiguration.configuration, updated_at: new Date().toISOString(), pinned_hololive_streams: pinnedStreams }); };