import { ApiClient } from '@/lib/apiClient';

export interface DownloadQuotaCheck {
  canDownload: boolean;
  downloadsUsed: number;
  downloadsLimit: number;
  downloadsRemaining: number;
  hasUnlimitedDownloads: boolean;
  clipOwnedByUser: boolean;
}

/**
 * Check if user can download a clip based on their current quota and ownership
 */
export async function checkDownloadQuota(
  apiClient: ApiClient,
  clipId?: string
): Promise<DownloadQuotaCheck> {
  try {
    const response = await apiClient.GET('/api/billing/download-usage', {
      params: {
        query: clipId ? { clip_id: clipId } : {},
      },
    });

    if (!response.data) {
      throw new Error('No download usage data received');
    }

    const {
      downloads_used,
      downloads_limit,
      downloads_remaining,
      has_unlimited_downloads,
      clip_owned_by_user = false,
    } = response.data as typeof response.data & {
      clip_owned_by_user?: boolean;
    };

    // User can download if they own the clip, have unlimited downloads, or have remaining quota
    const canDownload =
      clip_owned_by_user || has_unlimited_downloads || downloads_remaining > 0;

    return {
      canDownload,
      downloadsUsed: downloads_used,
      downloadsLimit: downloads_limit,
      downloadsRemaining: downloads_remaining,
      hasUnlimitedDownloads: has_unlimited_downloads,
      clipOwnedByUser: clip_owned_by_user,
    };
  } catch (error) {
    console.error('Failed to check download quota:', error);
    // Fail open - allow download if quota check fails
    return {
      canDownload: true,
      downloadsUsed: 0,
      downloadsLimit: 0,
      downloadsRemaining: 999,
      hasUnlimitedDownloads: false,
      clipOwnedByUser: false,
    };
  }
}
