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

describe('LanguageSwitcher', () => {
  describe('computed availableLocales', () => {
    it('should generate dropdown items from locales', () => {
      const mockLocale = ref('en');
      const mockLocales = ref([
        { code: 'en', name: 'English' },
        { code: 'fr', name: 'Français' },
      ]);
      const mockSetLocale = vi.fn();

      // Simulate the component logic
      const availableLocales = computed(() => {
        return mockLocales.value.map((optionLocale) => ({
          label: optionLocale.name,
          code: optionLocale.code,
          type: 'checkbox' as const,
          checked: optionLocale.code === mockLocale.value,
          onUpdateChecked: () => mockSetLocale(optionLocale.code),
        }));
      });

      expect(availableLocales.value).toHaveLength(2);
      expect(availableLocales.value[0].label).toBe('English');
      expect(availableLocales.value[0].checked).toBe(true);
      expect(availableLocales.value[1].label).toBe('Français');
      expect(availableLocales.value[1].checked).toBe(false);
    });

    it('should mark current locale as checked', () => {
      const mockLocale = ref('fr');
      const mockLocales = ref([
        { code: 'en', name: 'English' },
        { code: 'fr', name: 'Français' },
      ]);

      const availableLocales = computed(() => {
        return mockLocales.value.map((optionLocale) => ({
          label: optionLocale.name,
          code: optionLocale.code,
          type: 'checkbox' as const,
          checked: optionLocale.code === mockLocale.value,
        }));
      });

      expect(availableLocales.value[0].checked).toBe(false);
      expect(availableLocales.value[1].checked).toBe(true);
    });

    it('should call setLocale when switching', () => {
      const mockSetLocale = vi.fn();

      // Simulate the switchLocale function
      const switchLocale = (newLocale: string) => {
        mockSetLocale(newLocale);
      };

      switchLocale('fr');

      expect(mockSetLocale).toHaveBeenCalledWith('fr');
    });
  });
});
