import { test as base } from '@playwright/test';
import * as fs from 'fs';
import * as path from 'path';

/**
 * Test Data Fixture
 * 
 * Provides test data loading and tracking functionality
 * Helps manage test data cleanup
 */

export interface TestData {
  products: any;
  orders: any;
  tracker: any;
}

type TestDataFixtures = {
  testData: TestData;
};

/**
 * Load JSON file or return default
 */
function loadJsonFile(filePath: string, defaultValue: any = {}): any {
  try {
    if (fs.existsSync(filePath)) {
      const content = fs.readFileSync(filePath, 'utf8');
      return JSON.parse(content);
    }
  } catch (error) {
    console.warn(`Warning: Could not load ${filePath}:`, error);
  }
  return defaultValue;
}

/**
 * Save JSON file
 */
function saveJsonFile(filePath: string, data: any): void {
  try {
    // Ensure directory exists
    const dir = path.dirname(filePath);
    if (!fs.existsSync(dir)) {
      fs.mkdirSync(dir, { recursive: true });
    }
    
    fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
  } catch (error) {
    console.error(`Error saving ${filePath}:`, error);
  }
}

/**
 * Extended test with test data fixture
 */
export const test = base.extend<TestDataFixtures>({
  testData: async ({}, use) => {
    const dataDir = path.join(process.cwd(), 'test-data');
    
    // Load test data files
    const testData: TestData = {
      products: loadJsonFile(path.join(dataDir, 'products.json'), {
        testProducts: [],
        cartScenarios: []
      }),
      orders: loadJsonFile(path.join(dataDir, 'orders.json'), {
        testOrders: [],
        orderScenarios: []
      }),
      tracker: loadJsonFile(path.join(dataDir, 'cleanup-tracker.json'), {
        cartIds: [],
        orderIds: [],
        testDataCreated: []
      })
    };
    
    // Provide test data to test
    await use(testData);
    
    // Save tracker after test (in case it was updated)
    saveJsonFile(path.join(dataDir, 'cleanup-tracker.json'), testData.tracker);
  },
});

export { expect } from '@playwright/test';

