/**
 * Cliente API — subida de archivos a MinIO/S3 (documentos del CRM y Operaciones).
 */
import { api } from '$lib/api';

export interface UploadResult {
	file_key: string;
	file_url: string;
	name: string;
	content_type: string | null;
	size_bytes: number;
}

/** Sube un archivo (multipart) y devuelve su file_key permanente + URL firmada. */
export async function uploadFile(file: File, companyId: number): Promise<UploadResult> {
	const fd = new FormData();
	fd.append('file', file);
	const res = await api.request<UploadResult>(`/v1/crm/uploads?company_id=${companyId}`, {
		method: 'POST',
		body: fd
	});
	if (res.error) throw new Error(res.error);
	return res.data!;
}

/** Obtiene una URL firmada fresca para abrir un archivo por su file_key. */
export async function uploadUrl(fileKey: string, companyId: number): Promise<string> {
	const res = await api.get<{ url: string }>(
		`/v1/crm/uploads/url?key=${encodeURIComponent(fileKey)}&company_id=${companyId}`
	);
	if (res.error) throw new Error(res.error);
	return res.data!.url;
}

/** Descarga el archivo por el backend (sin exponer MinIO) y devuelve un blob. */
export async function downloadBlob(fileKey: string, companyId: number): Promise<Blob> {
	return (api as any).getBlob(
		`/v1/crm/uploads/download?key=${encodeURIComponent(fileKey)}&company_id=${companyId}`
	) as Promise<Blob>;
}
