/**
 * Check if the Ollama server is reachable.
 *
 * @param baseUrl - Ollama server base URL
 * @param timeoutMs - Timeout in milliseconds (default: 3000)
 * @returns `true` if the server responds to GET /api/tags within the timeout
 */
export async function checkHealth(baseUrl: string, timeoutMs: number = 3000): Promise<boolean> {
  try {
    const res = await fetch(`${baseUrl}/api/tags`, {
      signal: AbortSignal.timeout(timeoutMs),
    });
    return res.ok;
  } catch {
    return false;
  }
}

/**
 * Check health and return structured result with version info.
 */
export async function checkHealthDetailed(
  baseUrl: string,
  timeoutMs: number = 3000
): Promise<{ online: boolean; version: string | null; url: string }> {
  try {
    const [tagsRes, versionRes] = await Promise.allSettled([
      fetch(`${baseUrl}/api/tags`, { signal: AbortSignal.timeout(timeoutMs) }),
      fetch(`${baseUrl}/api/version`, { signal: AbortSignal.timeout(timeoutMs) }),
    ]);

    const online = tagsRes.status === 'fulfilled' && tagsRes.value.ok;
    let version: string | null = null;

    if (versionRes.status === 'fulfilled' && versionRes.value.ok) {
      const data = (await versionRes.value.json()) as { version?: string };
      version = data.version ?? null;
    }

    return { online, version, url: baseUrl };
  } catch {
    return { online: false, version: null, url: baseUrl };
  }
}
