import { describe, test, expect, beforeEach } from 'vitest';
import { initTianjiTracker } from './tracker';

describe('initTianjiTracker', () => {
  beforeEach(() => {
    document.head.innerHTML = '';
    document.body.innerHTML = '';
  });

  test('simple', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].async).toBe(true);
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
    });
  });

  test('customTrackerName', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      customTrackerName: 'custom.js',
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/custom.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
    });
  });

  test('auto-track set true', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      autoTrack: true,
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
    });
  });

  test('auto-track set false', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      autoTrack: false,
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
      autoTrack: 'false',
    });
  });

  test('domains', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      domains: ['example.com', 'www.example.com'],
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
      domains: 'example.com,www.example.com',
    });
  });

  test('disableTrack', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      disableTrack: true,
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
      doNotTrack: 'true',
    });
  });

  test('autoTrack set true', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      autoTrack: true,
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
    });
  });

  test('autoTrack set false', async () => {
    await initTianjiTracker({
      url: 'https://example.com',
      websiteId: 'fooo',
      autoTrack: false,
    });

    const scriptDoms = document.querySelectorAll('script');
    expect(scriptDoms.length).toBe(1);
    expect(scriptDoms[0].src).toBe('https://example.com/tracker.js');
    expect(scriptDoms[0].dataset).toEqual({
      websiteId: 'fooo',
      autoTrack: 'false',
    });
  });
});
