import { ApiError, request } from './client'; import type { components } from './generated/v1'; // The list endpoint (GET /api/watermarks) is picker-grade (id + name) and is already // provided by pickers.ts as getWatermarks(). This module adds the by-id read (full model) // and the mutations. Image upload is handled by artwork.ts (uploadArtwork(file,'watermark')). export type WatermarkDetail = components['schemas']['WatermarkFullResponseModel']; export type CreateWatermarkRequest = components['schemas']['CreateWatermarkRequest']; export type UpdateWatermarkRequest = components['schemas']['UpdateWatermarkRequest']; export function getWatermark(id: number): Promise { return request(`/api/watermarks/${id}`); } export function createWatermark(body: CreateWatermarkRequest): Promise { return request('/api/watermarks', { body, method: 'POST' }); } export function updateWatermark(id: number, body: UpdateWatermarkRequest): Promise { return request(`/api/watermarks/${id}`, { body, method: 'PUT' }); } export function deleteWatermark(id: number): Promise { return request(`/api/watermarks/${id}`, { method: 'DELETE' }); } // Preview URL for a custom watermark image. Mirrors the Blazor editor // (WatermarkEditor.razor) which renders `artwork/watermarks/{path}?contentType=...` via // ArtworkContentTypeModel.UrlWithContentType. export function watermarkImageUrl(path: string, contentType?: null | string): string { return contentType ? `/artwork/watermarks/${path}?contentType=${encodeURIComponent(contentType)}` : `/artwork/watermarks/${path}`; } export function messageFromWatermarkError(error: unknown, fallback = 'Unable to load watermarks'): string { if (error instanceof ApiError) { return error.detail ?? error.message; } if (error instanceof Error) { return error.message; } return fallback; }