// User Domain Mock Data
// This file contains mock data and utilities for user domain testing

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

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

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

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

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

  /**
   * Update user item
   */
  update(id: string, updates: Partial<User>): User | 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 user 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 User 1',
        createdAt: '2025-01-01T00:00:00Z',
        updatedAt: '2025-01-01T00:00:00Z',
      },
      {
        id: '2',
        name: 'Sample User 2',
        createdAt: '2025-01-02T00:00:00Z',
        updatedAt: '2025-01-02T00:00:00Z',
      },
      {
        id: '3',
        name: 'Sample User 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 mockUserData = new MockUserData();
