import { readConfig } from '../config/store';
import { fetchStatus, ApiError } from '../api/client';
import { pendingCount } from '../storage/queue';
import { AGENT_VERSION } from '../version';

export async function status(): Promise<void> {
  const config = readConfig();

  console.log('Buzy Prompt Tracker');
  console.log('');

  if (!config) {
    console.log('Not logged in. Run `prompt-agent login` to get started.');

    return;
  }

  console.log(`Organization: ${config.organizationSlug}`);
  console.log(`Tracking: ${config.enabled ? 'Enabled' : 'Disabled'}`);
  console.log(`Agent Version: ${AGENT_VERSION}`);

  let apiStatus = 'Disconnected';
  let uploadedToday: number | null = null;
  let lastUpload: string | null = null;

  try {
    const remote = await fetchStatus(config.apiBaseUrl, config.deviceToken);
    apiStatus = 'Connected';
    uploadedToday = remote.uploaded_today;
    lastUpload = remote.last_upload;
    console.log(`Developer: ${remote.developer}`);
    console.log(`Device: ${remote.device}`);
  } catch (error) {
    if (error instanceof ApiError && (error.status === 401 || error.status === 403)) {
      apiStatus = 'Unauthorized (re-run `prompt-agent login`)';
    }
  }

  console.log(`API: ${apiStatus}`);
  console.log('');
  console.log(`Queued (undelivered): ${pendingCount()}`);

  if (uploadedToday !== null) {
    console.log(`Uploaded Today: ${uploadedToday}`);
  }

  if (lastUpload) {
    console.log(`Last Upload: ${lastUpload}`);
  }
}
