/**
 * Тесты env-света частиц: чистая функция particleEnv (ambient целиком +
 * доля солнца) и константы режима lit. Освещаемые частицы видят ровно
 * столько света, сколько даёт сцена, — рендер пересчитывает при тиках.
 */
import { describe, expect, it } from 'vitest';
import { particleEnv, PARTICLE_ENV_SUN, PARTICLE_LIT_VIS } from '../particles';

describe('particleEnv (env-свет освещаемых частиц)', () => {
    it('ambient входит целиком с интенсивностью', () => {
        const [r, g, b] = particleEnv(
            { r: 0.5, g: 0.6, b: 0.7, intensity: 0.5 },
            { r: 0, g: 0, b: 0, intensity: 0 },
        );
        expect(r).toBeCloseTo(0.25);
        expect(g).toBeCloseTo(0.3);
        expect(b).toBeCloseTo(0.35);
    });

    it('солнце входит с долей PARTICLE_ENV_SUN', () => {
        const [r] = particleEnv(
            { r: 0, g: 0, b: 0, intensity: 0 },
            { r: 1, g: 1, b: 1, intensity: 2 },
        );
        expect(r).toBeCloseTo(2 * PARTICLE_ENV_SUN);
    });

    it('ночь: тёмный ambient + погасшее солнце — свет почти нулевой', () => {
        const [r, g, b] = particleEnv(
            { r: 0.04, g: 0.04, b: 0.07, intensity: 0.55 },
            { r: 1, g: 1, b: 1, intensity: 0.08 },
        );
        const luma = r * 0.3 + g * 0.6 + b * 0.1;
        expect(luma).toBeLessThan(0.1); // в темноте частица невидима
    });

    it('день: ambient + солнце дают received, насыщающий видимость', () => {
        const [r, g, b] = particleEnv(
            { r: 0.58, g: 0.58, b: 0.62, intensity: 0.55 },
            { r: 1, g: 0.9, b: 0.8, intensity: 2.0 },
        );
        const luma = r * 0.3 + g * 0.6 + b * 0.1;
        expect(luma * PARTICLE_LIT_VIS).toBeGreaterThan(1); // vis = 1 — как раньше
    });
});