/**
 * Tests E2E — Cycle de vie complet du timer
 *
 * Navigue vers un enclos, active une jauge, ajoute une DD,
 * demarre/pause/reprend/reset le timer.
 */
import { test, expect } from './electron-app';

test.describe('Cycle de vie du timer', () => {
  test.beforeEach(async ({ page }) => {
    // Naviguer vers le premier enclos via la sidebar
    const firstEnclos = page.locator('.sb-item[data-view]').filter({
      has: page.locator('.sb-dot'),
    }).first();
    await firstEnclos.click();
    await expect(page.locator('.enclos-view')).toBeVisible({ timeout: 5000 });
  });

  test('Activer la jauge baffeur et definir son niveau', async ({ page }) => {
    // Cliquer sur le bouton baffeur pour l'activer
    await page.click('.gauge-btn[data-gid="baffeur"]');
    // Verifier que la jauge est active (classe .on)
    await expect(page.locator('.gauge-btn[data-gid="baffeur"].on')).toBeVisible();

    // Definir le niveau de la jauge a 50000
    const gaugeInput = page.locator('.gauge-inp[data-gid="baffeur"]');
    await gaugeInput.click();
    await gaugeInput.fill('50000');
    await gaugeInput.press('Enter');
    // Verifier que la valeur est bien 50000
    await expect(gaugeInput).toHaveValue('50000');
  });

  test('Ajouter une dragodinde puis demarrer le timer', async ({ page }) => {
    // Activer la jauge baffeur
    await page.click('.gauge-btn[data-gid="baffeur"]');
    const gaugeInput = page.locator('.gauge-inp[data-gid="baffeur"]');
    await gaugeInput.click();
    await gaugeInput.fill('50000');
    await gaugeInput.press('Enter');

    // L'enclos contient deja 1 DD (creee avec l'enclos)
    const ddGrid = page.locator('.dd-grid');
    await expect(ddGrid.locator('.dd-card')).toHaveCount(1, { timeout: 5000 });

    // Demarrer le timer
    const startBtn = page.locator('.enc-start-btn');
    await startBtn.click();

    // Verifier que le bouton est passe en mode PAUSE
    await expect(page.locator('.enc-btn-pause')).toBeVisible({ timeout: 3000 });

    // Verifier que le temps ecoule n'est plus 00:00:00 (apres un petit delai)
    await page.waitForTimeout(1500);
    const elapsedText = await page.locator('.enc-elapsed').textContent();
    expect(elapsedText).not.toBe('00:00:00');

    // Verifier que "Alarme dans" montre un temps (pas --:--:-- ni infini)
    const alarmText = await page.locator('.enc-alarm').textContent();
    expect(alarmText).not.toBe('--:--:--');
    expect(alarmText).not.toBe('\u221e');
  });

  test('Pause et reprise du timer', async ({ page }) => {
    // Setup: activer jauge + DD + demarrer
    await page.click('.gauge-btn[data-gid="baffeur"]');
    const gaugeInput = page.locator('.gauge-inp[data-gid="baffeur"]');
    await gaugeInput.click();
    await gaugeInput.fill('50000');
    await gaugeInput.press('Enter');
    await page.click('button:has-text("Ajouter une Dragodinde")');
    await page.click('.enc-start-btn');
    await expect(page.locator('.enc-btn-pause')).toBeVisible({ timeout: 3000 });

    // Mettre en pause
    await page.click('.enc-btn-pause');
    // Le bouton devrait afficher REPRENDRE
    await expect(page.locator('.enc-start-btn')).toContainText('REPRENDRE', { timeout: 3000 });

    // Capturer le temps ecoule apres la pause
    const elapsedAfterPause = await page.locator('.enc-elapsed').textContent();

    // Attendre un moment pour verifier que le temps ne bouge pas
    await page.waitForTimeout(1500);
    const elapsedStillPaused = await page.locator('.enc-elapsed').textContent();
    expect(elapsedStillPaused).toBe(elapsedAfterPause);

    // Reprendre le timer
    await page.click('.enc-start-btn');
    await expect(page.locator('.enc-btn-pause')).toBeVisible({ timeout: 3000 });
  });

  test('Reset du timer', async ({ page }) => {
    // Setup: activer jauge + DD + demarrer
    await page.click('.gauge-btn[data-gid="baffeur"]');
    const gaugeInput = page.locator('.gauge-inp[data-gid="baffeur"]');
    await gaugeInput.click();
    await gaugeInput.fill('50000');
    await gaugeInput.press('Enter');
    await page.click('button:has-text("Ajouter une Dragodinde")');
    await page.click('.enc-start-btn');
    await expect(page.locator('.enc-btn-pause')).toBeVisible({ timeout: 3000 });

    // Cliquer sur le bouton reset
    await page.click('.enc-reset-btn');

    // Verifier que le timer est revenu a 00:00:00
    await expect(page.locator('.enc-elapsed')).toHaveText('00:00:00', { timeout: 3000 });

    // Le bouton devrait afficher DEMARRER
    await expect(page.locator('.enc-start-btn')).toContainText('MARRER', { timeout: 3000 });
  });
});
