import { describe, expect, it } from 'vitest';
import { resolveInstallBannerState, shouldShowInstallBanner } from './installBanner';

describe('resolveInstallBannerState', () => {
  it('returns null when already installed', () => {
    expect(resolveInstallBannerState({ isInstalled: true, isStandalone: false, canInstall: true, isIos: true })).toBeNull();
  });

  it('returns null when running in standalone mode', () => {
    expect(resolveInstallBannerState({ isInstalled: false, isStandalone: true, canInstall: true, isIos: true })).toBeNull();
  });

  it('returns prompt when install prompt is available', () => {
    expect(resolveInstallBannerState({ isInstalled: false, isStandalone: false, canInstall: true, isIos: false })).toEqual({ variant: 'prompt' });
  });

  it('returns ios when on iOS without prompt', () => {
    expect(resolveInstallBannerState({ isInstalled: false, isStandalone: false, canInstall: false, isIos: true })).toEqual({ variant: 'ios' });
  });

  it('returns null when no install option exists', () => {
    expect(resolveInstallBannerState({ isInstalled: false, isStandalone: false, canInstall: false, isIos: false })).toBeNull();
  });
});

describe('shouldShowInstallBanner', () => {
  it('returns null when dismissed', () => {
    const result = shouldShowInstallBanner(
      { isInstalled: false, isStandalone: false, canInstall: true, isIos: true },
      true,
    );
    expect(result).toBeNull();
  });

  it('returns state when not dismissed', () => {
    const result = shouldShowInstallBanner(
      { isInstalled: false, isStandalone: false, canInstall: true, isIos: false },
      false,
    );
    expect(result).toEqual({ variant: 'prompt' });
  });
});
