import { ApiError, ApiErrorCode } from '@/lib/error-handler'
import type { InsightCapabilitiesResponse } from './api-types'

export const WITTY_INSIGHT_PROJECT_URL = 'https://gitcode.com/openeuler/witty-insight'

export type InsightAvailabilityStatus = 'checking' | 'available' | 'unavailable'

export function isInsightCapabilitiesResponse(
  value: unknown
): value is InsightCapabilitiesResponse {
  if (!value || typeof value !== 'object') {
    return false
  }

  const candidate = value as Partial<InsightCapabilitiesResponse>
  const features = candidate.features as
    | Partial<InsightCapabilitiesResponse['features']>
    | undefined

  return (
    typeof candidate.enabled === 'boolean' &&
    typeof candidate.reachable === 'boolean' &&
    !!features &&
    typeof features.sessions === 'boolean' &&
    typeof features.timeseries === 'boolean' &&
    typeof features.interruptions === 'boolean' &&
    typeof features.health === 'boolean'
  )
}

export function isInsightBackendUnavailable(error: unknown): boolean {
  if (error instanceof ApiError) {
    return (
      error.statusCode === 404 ||
      error.code === ApiErrorCode.RESOURCE_NOT_FOUND ||
      error.code === ApiErrorCode.NETWORK_ERROR ||
      error.code === ApiErrorCode.TIMEOUT_ERROR
    )
  }

  return false
}