import { defineConfig, devices } from '@playwright/test';
import dotenv from 'dotenv-safe';
import { OrtoniReportConfig } from "ortoni-report";

if (!process.env.CI) {
  // Environment variables are present in CI environment, no need to read from file
  if (process.env.NODE_ENV == 'undefined' || process.env.NODE_ENV == null) {
    dotenv.config({ path: `playwright-tests/.env.dev`, example: 'playwright-tests/.env.example' });
  }
  else {
    dotenv.config({ path: `playwright-tests/.env.${process.env.NODE_ENV}`, example: 'playwright-tests/.env.example' });
  }
}


/**
 * Read environment variables from file.
 * https://github.com/motdotla/dotenv
 */
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });

/**
 * See https://playwright.dev/docs/test-configuration.
 */
const reportConfig: OrtoniReportConfig = {
  port: 1994,
  open: "never",
  folderPath: "playwright-tests/artifacts/test-results",
  filename: "index.html",
  logo: "../data/logo.png",
  title: "Test Report",
  showProject: false,
  projectName: "FMG-Nextgen-Playwright-Report",
  testType: `E2E- Environment: ${process.env.NODE_ENV} `,
  preferredTheme: "light",
  base64Image: true,
};

export default defineConfig({
  testDir: './tests',
  /* Run tests in files in parallel */
  fullyParallel: true,
  /* Fail the build on CI if you accidentally left test.only in the source code. */
  forbidOnly: !!process.env.CI,
  /* Retry on CI only */
  retries: process.env.CI ? 1 : 0,
  /* Opt out of parallel tests on CI. */
  workers: process.env.CI ? 4 : 5,
  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
  reporter: [
    ['ortoni-report', reportConfig],
    ['junit'],
    ['list']
  ],
  timeout: 180_000,
  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
  outputDir: 'artifacts/test-results',
  use: {
    /* Base URL to use in actions like `await page.goto('/')`. */
    // baseURL: 'http://127.0.0.1:3000',

    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
    trace: 'on-first-retry',
    headless: process.env.CI ? true : false,
    screenshot: "only-on-failure",
    actionTimeout: 60_000,
    navigationTimeout: 60_000,
  },

  /* Configure projects for major browsers */
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },

    // {
    //   name: 'firefox',
    //   use: { ...devices['Desktop Firefox'] },
    // },

    // {
    //   name: 'webkit',
    //   use: { ...devices['Desktop Safari'] },
    // },

    /* Test against mobile viewports. */
    // {
    //   name: 'Mobile Chrome',
    //   use: { ...devices['Pixel 5'] },
    // },
    // {
    //   name: 'Mobile Safari',
    //   use: { ...devices['iPhone 12'] },
    // },

    /* Test against branded browsers. */
    // {
    //   name: 'Microsoft Edge',
    //   use: { ...devices['Desktop Edge'], channel: 'msedge' },
    // },
    // {
    //   name: 'Google Chrome',
    //   use: { ...devices['Desktop Chrome'], channel: 'chrome' },
    // },
  ],

  /* Run your local dev server before starting the tests */
  // webServer: {
  //   command: 'npm run start',
  //   url: 'http://127.0.0.1:3000',
  //   reuseExistingServer: !process.env.CI,
  // },
});
