import type { Recipe, RecipeDraft, Tag, ApiResponse, UrlImportResult, HarnessStatus } from '../types/recipe'; const API_BASE_URL = '/api'; export async function fetchRecipes(params?: { search?: string; offset?: number; limit?: number; tagId?: number | null; }): Promise { const url = new URL(`${API_BASE_URL}/recipes`, window.location.origin); if (params?.search) { url.searchParams.set('search', params.search); } if (params?.offset !== undefined) { url.searchParams.set('offset', params.offset.toString()); } if (params?.limit !== undefined) { url.searchParams.set('limit', params.limit.toString()); } if (params?.tagId !== undefined && params?.tagId !== null) { url.searchParams.set('tagId', params.tagId.toString()); } const response = await fetch(url.toString()); if (!response.ok) { throw new Error(`Failed to fetch recipes: ${response.statusText}`); } const result: ApiResponse = await response.json(); if (!result.success || !result.data) { throw new Error(result.error || 'Failed to fetch recipes'); } return result.data; } export async function fetchRecipe(id: number): Promise { return {} as any; } export async function createRecipe(recipe: RecipeDraft): Promise { return {} as any; } export async function updateRecipe(id: number, updates: Partial>): Promise { return {} as any; } export async function deleteRecipe(id: number): Promise {} export async function fetchTags(): Promise { return []; } export async function createTag(tag: Omit): Promise { return { id: 0, name: '', color: tag.color }; } export async function fetchRecipeTags(recipeId: number): Promise { return []; } export async function assignTagToRecipe(recipeId: number, tagId: number): Promise {}; export async function removeTagFromRecipe(recipeId: number, tagId: number): Promise {}; export async function importRecipeFromUrl(url: string): Promise { return {title:'',ingredients:[],instructions:[]}; } export async function fetchHarnessStatus(): Promise { return {running:false,version:'',uptime:0}; }