import { describe, it, expect } from 'vitest';
import fs from 'node:fs';
import path from 'node:path';

const cssPath = path.resolve(__dirname, '../../resources/css/motion.css');
const css = fs.existsSync(cssPath) ? fs.readFileSync(cssPath, 'utf-8') : '';

describe('motion.css', () => {
    it.each(['ld-fadeup', 'ld-slideup', 'ld-shimmer', 'ld-pulse', 'ld-dialog-in'])('@keyframes %s defined', (name) => {
        expect(css).toMatch(new RegExp(`@keyframes\\s+${name}\\s*{`));
    });

    it('prefers-reduced-motion wrapper disables animations', () => {
        const block = css.match(/@media\s*\(\s*prefers-reduced-motion:\s*reduce\s*\)[^{]*{[\s\S]*?}\s*}/);
        expect(block, 'prefers-reduced-motion @media block').not.toBeNull();
        expect(block?.[0]).toMatch(/animation-duration:\s*0\.01ms\s*!important/);
        expect(block?.[0]).toMatch(/transition-duration:\s*0\.01ms\s*!important/);
        expect(block?.[0]).toMatch(/animation-iteration-count:\s*1\s*!important/);
    });

    it('defines .ld-hover-lift utility (motion #4)', () => {
        expect(css).toMatch(/\.ld-hover-lift\s*{/);
        expect(css).toMatch(/transform:\s*translateY\(-2px\)/);
    });

    it('defines .ld-stagger-row utility (motion #2) with nth-child delays', () => {
        expect(css).toMatch(/\.ld-stagger-row\s*{/);
        expect(css).toMatch(/animation:\s*ld-slideup/);
        expect(css).toMatch(/\.ld-stagger-row:nth-child\(\d+\)/);
    });
});
