import { mount } from '@vue/test-utils';
import { describe, expect, it } from 'vitest';
import BalanceCard from '../../resources/js/components/billing/BalanceCard.vue';

import { createVuetify } from 'vuetify';

const vuetify = createVuetify();

const baseProps = {
    walletRub: 5000,
    affordableLeads: 46,
    currentTierPriceRub: '120.00',
    requiredLeadsPerDay: 4,
};

describe('BalanceCard (Billing v2 Spec A; ряд Деньги → Лиды → Запас)', () => {
    it('shows wallet ₽ formatted with thousands separator', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        // Intl.NumberFormat('ru-RU') uses U+00A0 (non-breaking space) — match any whitespace
        expect(w.text()).toMatch(/5\s000/);
    });

    it('shows «≈ N лидов» using affordableLeads', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).toContain('≈ 46');
        expect(w.text()).toContain('лидов');
    });

    it('does NOT contain «(ГЦК)»', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).not.toContain('ГЦК');
    });

    it('does NOT contain «округление вниз ₽→лиды»', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).not.toContain('округление вниз');
    });

    it('renders «сейчас по X ₽/лид» subline', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).toContain('120.00 ₽/лид');
    });

    it('does NOT contain the removed «Тариф» card', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).not.toContain('Тариф');
    });

    it('Запас = affordableLeads / requiredLeadsPerDay (живой заказ): 46 / 4 → 11 дн.', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).toContain('Запас');
        expect(w.text()).toMatch(/11\s*дн\./);
        expect(w.text()).toContain('при 4');
    });

    it('Запас = — и «нет активных проектов» когда проекты не заказывают (B1-2, requiredLeadsPerDay = 0)', () => {
        const w = mount(BalanceCard, {
            props: { ...baseProps, requiredLeadsPerDay: 0 },
            global: { plugins: [vuetify] },
        });
        // B1-2: было «∞ дн.» — расходилось с дашбордом; теперь «—» + «нет активных проектов».
        expect(w.text()).not.toContain('∞');
        expect(w.text()).toContain('—');
        expect(w.text()).toContain('нет активных проектов');
    });

    it('НЕ содержит строки-чтения (дубль убран)', () => {
        const w = mount(BalanceCard, { props: baseProps, global: { plugins: [vuetify] } });
        expect(w.text()).not.toContain('тыс ₽ =');
        expect(w.text()).not.toContain('млн ₽ =');
    });
});
