// features/{{kebabCase featureName}}/hooks/use-{{kebabCase featureName}}s.ts
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { z } from 'zod';
import { {{camelCase featureName}}Schema } from '@/features/{{kebabCase featureName}}/types/{{kebabCase featureName}}.schemas';
import type { Create{{pascalCase featureName}}Input } from '@/features/{{kebabCase featureName}}/types/{{kebabCase featureName}}.types';

// ============================================
// Query Key Factory
// ============================================

export const {{camelCase featureName}}Keys = {
  all: ['{{kebabCase featureName}}'] as const,
  lists: () => [...{{camelCase featureName}}Keys.all, 'list'] as const,
  detail: (id: string) => [...{{camelCase featureName}}Keys.all, 'detail', id] as const,
};

// ============================================
// List Hook (TanStack Query v5 syntax)
// ============================================

const {{camelCase featureName}}ListSchema = z.array({{camelCase featureName}}Schema);

export function use{{pascalCase featureName}}s() {
  return useQuery({
    queryKey: {{camelCase featureName}}Keys.lists(),
    queryFn: async () => {
      const res = await fetch('/api/{{kebabCase featureName}}');
      if (!res.ok) throw new Error('Failed to fetch {{featureName}}');
      return {{camelCase featureName}}ListSchema.parse(await res.json());
    },
  });
}

// ============================================
// Create Mutation
// ============================================

export function useCreate{{pascalCase featureName}}() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: async (input: Create{{pascalCase featureName}}Input) => {
      const res = await fetch('/api/{{kebabCase featureName}}', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(input),
      });
      if (!res.ok) throw new Error('Failed to create {{featureName}}');
      return res.json();
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: {{camelCase featureName}}Keys.lists() });
    },
  });
}
