// Product Domain Mock Data
// This file contains mock data and utilities for product domain testing

/**
 * TODO: Replace this interface with your actual Product entity
 * Import from: '../entities/Product'
 */
interface Product {
  id: string;
  name: string;
  createdAt: string;
  updatedAt: string;
  // Add your domain-specific fields here
}

/**
 * Mock product data store
 */
class MockProductData {
  private data: Product[] = [
    {
      id: '1',
      name: 'Sample Product 1',
      createdAt: '2025-01-01T00:00:00Z',
      updatedAt: '2025-01-01T00:00:00Z',
    },
    {
      id: '2',
      name: 'Sample Product 2',
      createdAt: '2025-01-02T00:00:00Z',
      updatedAt: '2025-01-02T00:00:00Z',
    },
    {
      id: '3',
      name: 'Sample Product 3',
      createdAt: '2025-01-03T00:00:00Z',
      updatedAt: '2025-01-03T00:00:00Z',
    },
  ];

  /**
   * Get all product items
   */
  getAll(): Product[] {
    return [...this.data];
  }

  /**
   * Get product item by ID
   */
  getById(id: string): Product | undefined {
    return this.data.find(item => item.id === id);
  }

  /**
   * Create new product item
   */
  create(item: Partial<Product>): Product {
    const newItem: Product = {
      id: Date.now().toString(),
      name: item.name || 'New Product',
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString(),
      ...item,
    };
    
    this.data.push(newItem);
    return newItem;
  }

  /**
   * Update product item
   */
  update(id: string, updates: Partial<Product>): Product | undefined {
    const index = this.data.findIndex(item => item.id === id);
    
    if (index === -1) {
      return undefined;
    }
    
    this.data[index] = {
      ...this.data[index],
      ...updates,
      updatedAt: new Date().toISOString(),
    };
    
    return this.data[index];
  }

  /**
   * Delete product item
   */
  delete(id: string): boolean {
    const index = this.data.findIndex(item => item.id === id);
    
    if (index === -1) {
      return false;
    }
    
    this.data.splice(index, 1);
    return true;
  }

  /**
   * Reset data to initial state (useful for tests)
   */
  reset(): void {
    this.data = [
      {
        id: '1',
        name: 'Sample Product 1',
        createdAt: '2025-01-01T00:00:00Z',
        updatedAt: '2025-01-01T00:00:00Z',
      },
      {
        id: '2',
        name: 'Sample Product 2',
        createdAt: '2025-01-02T00:00:00Z',
        updatedAt: '2025-01-02T00:00:00Z',
      },
      {
        id: '3',
        name: 'Sample Product 3',
        createdAt: '2025-01-03T00:00:00Z',
        updatedAt: '2025-01-03T00:00:00Z',
      },
    ];
  }

  /**
   * Add custom methods for your domain-specific operations
   * Example: getByStatus, getByUser, etc.
   */
}

// Export singleton instance
export const mockProductData = new MockProductData();
