import supabase from './supabase'; export interface UserPreferences { created_at: string; updated_at: string; user_id: number; pinned_hololive_streams: string[]; hide_missing_badges: boolean; biography: string | null; } interface NewUserPreferences { updated_at?: string; pinned_hololive_streams?: string[]; hide_missing_badges?: boolean; } export const getUserPreferences = async (userId: number) => { const { data, error } = await supabase.from('user_preferences').select('*').eq('user_id', userId); if (error || data.length === 0 || data[0].user_id !== userId) return null; return data[0] as UserPreferences; }; export const setUserPreferences = async (userId: number, preferences: NewUserPreferences) => { const userPreferences = await getUserPreferences(userId); const { data, error } = await supabase .from('user_preferences') .upsert( { user_id: userId, updated_at: preferences.updated_at || new Date().toISOString(), pinned_hololive_streams: preferences.pinned_hololive_streams || (userPreferences ? userPreferences.pinned_hololive_streams : []), hide_missing_badges: preferences.hide_missing_badges || false, biography: userPreferences ? userPreferences.biography : null }, { onConflict: 'user_id' } ) .select(); if (error || !data || (data as []).length === 0) return null; return data[0] as UserPreferences; }; export const toggleHololiveStreamPinning = async (userId: number, streamId: string) => { const userPreferences = await getUserPreferences(userId); if (!userPreferences) return null; const pinnedStreams = userPreferences.pinned_hololive_streams; const index = pinnedStreams.indexOf(streamId); if (index === -1) pinnedStreams.push(streamId); else pinnedStreams.splice(index, 1); return await setUserPreferences(userId, { updated_at: new Date().toISOString(), pinned_hololive_streams: pinnedStreams, hide_missing_badges: userPreferences.hide_missing_badges }); }; export const toggleHideMissingBadges = async (userId: number) => { const userPreferences = await getUserPreferences(userId); return await setUserPreferences(userId, { updated_at: new Date().toISOString(), pinned_hololive_streams: userPreferences ? userPreferences.pinned_hololive_streams : [], hide_missing_badges: userPreferences ? !userPreferences.hide_missing_badges : false }); };