/**
 * User Preferences API — per-user UI settings stored server-side.
 * Matches backend endpoints from /api/v1/user/preferences.
 *
 * Backend: app/routes/user_preferences.py, app/models/user_preference.py
 */

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { apiGet, apiPut, apiDelete } from './client';

// ── Types ──

export interface PreferenceEntry {
  key: string;
  value: unknown;
  updated_at?: string | null;
}

export interface PreferenceListResponse {
  preferences: PreferenceEntry[];
}

// ── Hooks ──

export function useUserPreferences() {
  return useQuery({
    queryKey: ['userPreferences'],
    queryFn: () =>
      apiGet<PreferenceListResponse>('/user/preferences'),
  });
}

export function useUserPreference(key: string) {
  return useQuery({
    queryKey: ['userPreferences', key],
    queryFn: () =>
      apiGet<PreferenceEntry>(`/user/preferences/${key}`),
    enabled: !!key,
  });
}

export function useUpsertUserPreference() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: ({
      key,
      value,
    }: {
      key: string;
      value: unknown;
    }) =>
      apiPut<PreferenceEntry>(`/user/preferences/${key}`, {
        value,
      }),
    onSuccess: () => {
      queryClient.invalidateQueries({
        queryKey: ['userPreferences'],
      });
    },
  });
}

export function useDeleteUserPreference() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: (key: string) =>
      apiDelete(`/user/preferences/${key}`),
    onSuccess: () => {
      queryClient.invalidateQueries({
        queryKey: ['userPreferences'],
      });
    },
  });
}
