import { beforeEach, describe, expect, it } from 'vitest';
import {
  CHECKOUT_STORAGE_KEY,
  PENDING_CHECKOUT_TTL_MS,
  isCheckoutExpired,
  loadPendingCheckout,
  shouldClearPendingCheckout,
  storePendingCheckout,
} from '../lib/billingCheckout';

describe('billingCheckout helpers', () => {
  beforeEach(() => {
    sessionStorage.clear();
  });
  it('detects expired pending checkout', () => {
    const pending = { packageId: 12, startedAt: 0 };
    expect(isCheckoutExpired(pending, PENDING_CHECKOUT_TTL_MS + 1)).toBe(true);
  });

  it('keeps pending checkout when active package differs', () => {
    const pending = { packageId: 12, startedAt: Date.now() };
    expect(shouldClearPendingCheckout(pending, 18, pending.startedAt)).toBe(false);
  });

  it('clears pending checkout when active package matches', () => {
    const now = Date.now();
    const pending = { packageId: 12, startedAt: now };
    expect(shouldClearPendingCheckout(pending, 12, now)).toBe(true);
  });

  it('stores and loads pending checkout from session storage', () => {
    const pending = { packageId: 7, checkoutSessionId: 'sess_123', startedAt: Date.now() };
    storePendingCheckout(pending);
    expect(loadPendingCheckout(pending.startedAt)).toEqual(pending);
  });

  it('clears pending checkout storage', () => {
    storePendingCheckout({ packageId: 7, checkoutSessionId: 'sess_123', startedAt: Date.now() });
    storePendingCheckout(null);
    expect(sessionStorage.getItem(CHECKOUT_STORAGE_KEY)).toBeNull();
  });
});
