import { describe, expect, it } from 'vitest';
import { invoiceOperationalStatus, nextWarehouseState, validateApprovedQuantity, warehouseEventType } from '../../src/domain/delivery.js';

describe('ماشین حالت تحویل', () => {
  it('تحویل، برگشت و تحویل مجدد را معتبر می‌داند', () => {
    expect(nextWarehouseState('pending', 'deliver')).toBe('delivered');
    expect(nextWarehouseState('delivered', 'return')).toBe('returned');
    expect(nextWarehouseState('returned', 'deliver')).toBe('delivered');
    expect(warehouseEventType('returned', 'deliver')).toBe('redelivered');
  });
  it('گذار نامعتبر و بیش‌تحویلی را رد می‌کند', () => {
    expect(() => nextWarehouseState('cancelled', 'deliver')).toThrow(/سازگار نیست/);
    expect(() => validateApprovedQuantity(6, 5)).toThrow(/بیشتر/);
    expect(() => validateApprovedQuantity(0, 5)).toThrow(/حداقل/);
  });
  it('وضعیت را از مقدارها و رخدادها محاسبه می‌کند و پرچم جدا نگه می‌دارد', () => {
    const result = invoiceOperationalStatus({ archived: false, hasDiscrepancy: true, totalQuantity: 10, deliveredQuantity: 4, hasPending: false, hasCancelled: false, hasReturned: false });
    expect(result.label).toBe('تحویل جزئی');
    expect(result.flags).toContain('دارای مغایرت');
  });
});

