import { afterEach, describe, expect, it, vi } from 'vitest';
import { insideVK, onVKPath, vkAppId, vkLaunchParams, vkStartParam } from './vk';

describe('vk launch detection', () => {
  afterEach(() => vi.unstubAllGlobals());

  it('is not inside VK and not on the VK path without a location (node / SSR)', () => {
    expect(onVKPath()).toBe(false);
    expect(insideVK()).toBe(false);
    expect(vkLaunchParams()).toBe('');
  });

  it('detects the dedicated /vk/ entry path', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '' });
    expect(onVKPath()).toBe(true);
    vi.stubGlobal('location', { pathname: '/app/', search: '' });
    expect(onVKPath()).toBe(false);
  });

  it('returns the signed launch query only when a sign is present', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&vk_ts=2&sign=abc' });
    expect(vkLaunchParams()).toBe('vk_user_id=1&vk_ts=2&sign=abc');
    expect(insideVK()).toBe(true);
  });

  it('treats a URL carrying no sign as not a VK launch', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '?utm_source=catalog' });
    expect(vkLaunchParams()).toBe('');
    expect(insideVK()).toBe(false);
  });
});

describe('vk launch params', () => {
  afterEach(() => vi.unstubAllGlobals());

  it('reads the VK app id from the launch query', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_app_id=6736218&sign=x' });
    expect(vkAppId()).toBe('6736218');
  });

  it('reads the direct-link deep-link payload from the hash query param', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&sign=x&hash=f123456' });
    expect(vkStartParam()).toBe('f123456');
  });

  it('returns empty app id / start param when absent', () => {
    vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&sign=x' });
    expect(vkAppId()).toBe('');
    expect(vkStartParam()).toBe('');
  });
});
