import { describe, it, expect } from 'vitest';

import { getAnalysisErrorMessage, getErrorActionUrl } from './errorMessages';

describe('getAnalysisErrorMessage', () => {
  it('detects GSC quota/rate limit errors', () => {
    const result = getAnalysisErrorMessage('Google Search Console quota exceeded');
    expect(result.title).toBe('Google Search Console Limit Reached');
    expect(result.description).toContain('daily GSC quota');
  });

  it('detects GSC authentication errors', () => {
    const result = getAnalysisErrorMessage('GSC authentication failed 401');
    expect(result.title).toBe('GSC Connection Lost');
    expect(result.description).toContain('Google Search Console connection');
    expect(result.action).toBe('Reconnect');
    expect(result.actionUrl).toBe('settings');
  });

  it('detects WordPress connection errors', () => {
    const result = getAnalysisErrorMessage('WordPress connection timeout');
    expect(result.title).toBe('WordPress Connection Issue');
    expect(result.description).toContain('WordPress site');
  });

  it('detects network/timeout errors', () => {
    const result = getAnalysisErrorMessage('Network timeout after 30 seconds');
    expect(result.title).toBe('Network Error');
    expect(result.description).toContain('internet connection');
  });

  it('returns default error for unknown errors', () => {
    const result = getAnalysisErrorMessage('Some random error occurred');
    expect(result.title).toBe('Analysis Error');
    expect(result.description).toContain('Something unexpected');
  });

  it('is case insensitive', () => {
    const result = getAnalysisErrorMessage('QUOTA EXCEEDED FOR GSC');
    expect(result.title).toBe('Google Search Console Limit Reached');
  });
});

describe('getErrorActionUrl', () => {
  it('returns undefined when no action url provided', () => {
    const result = getErrorActionUrl(undefined);
    expect(result).toBeUndefined();
  });

  it('converts settings action with site id', () => {
    const result = getErrorActionUrl('settings', 5);
    expect(result).toBe('/sites/5/settings/connections');
  });

  it('converts settings action without site id', () => {
    const result = getErrorActionUrl('settings');
    expect(result).toBe('/settings');
  });

  it('returns custom url as-is', () => {
    const result = getErrorActionUrl('/custom-path', 5);
    expect(result).toBe('/custom-path');
  });
});
