import { describe, it, expect } from 'vitest';
import type { ItemSummaryData, ItemDetailData } from '@alqove/types';

describe('Item rating fields', () => {
  it('ItemSummaryData accepts the six optional store rating fields', () => {
    const summary: ItemSummaryData = {
      id: 'i-1',
      title: 'Shirt',
      price: 2500,
      condition: 'EUC',
      brand: null,
      size: null,
      status: 'active',
      image_url: null,
      store: { id: 's-1', name: 'Revive', city: 'Seattle', state: 'WA' },
      created_at: '2026-05-01T00:00:00Z',
      store_average_rating: 4.8,
      store_review_count: 12,
      rating_item_as_described: 4.9,
      rating_shipping_speed: 4.7,
      rating_communication: 4.85,
      rating_packaging: 4.6,
    };

    expect(summary.store_average_rating).toBe(4.8);
    expect(summary.store_review_count).toBe(12);
    expect(summary.rating_item_as_described).toBe(4.9);
    expect(summary.rating_shipping_speed).toBe(4.7);
    expect(summary.rating_communication).toBe(4.85);
    expect(summary.rating_packaging).toBe(4.6);
  });

  it('rating fields are optional and may be null when a store has no reviews', () => {
    const summary: ItemSummaryData = {
      id: 'i-2',
      title: 'Hat',
      price: 1500,
      condition: 'NWT',
      brand: null,
      size: null,
      status: 'active',
      image_url: null,
      store: { id: 's-2', name: 'New Store', city: 'Portland', state: 'OR' },
      created_at: '2026-05-02T00:00:00Z',
      store_average_rating: null,
      store_review_count: 0,
      rating_item_as_described: null,
      rating_shipping_speed: null,
      rating_communication: null,
      rating_packaging: null,
    };

    expect(summary.store_average_rating).toBeNull();
    expect(summary.store_review_count).toBe(0);
  });

  it('ItemDetailData accepts the same six fields', () => {
    const detail: ItemDetailData = {
      id: 'i-3',
      title: 'Coat',
      description: 'Warm.',
      price: 9900,
      original_retail: null,
      condition: 'GUC',
      brand: null,
      size: null,
      colors: null,
      measurements: null,
      status: 'active',
      category: { id: 1, name: 'Outerwear', slug: 'outerwear' },
      store: { id: 's-3', name: 'Old Closet', city: 'Boston', state: 'MA' },
      images: [],
      view_count: 0,
      save_count: 0,
      sold_at: null,
      created_at: '2026-05-03T00:00:00Z',
      updated_at: '2026-05-03T00:00:00Z',
      store_average_rating: 4.2,
      store_review_count: 5,
      rating_item_as_described: 4.0,
      rating_shipping_speed: 4.4,
      rating_communication: 4.2,
      rating_packaging: 4.0,
    };

    expect(detail.store_average_rating).toBe(4.2);
    expect(detail.rating_packaging).toBe(4.0);
  });
});
