package zacksolutions.base;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.Properties;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.reporter.ExtentSparkReporter;
import com.aventstack.extentreports.ExtentReports;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Parameters;

public class Initialization {
  // let's set up our variables

  // private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
  public static WebDriver driver;
  public static Properties prop;
  public static ExtentReports extent;
  public static ExtentTest test;

  public Initialization() {
    // let's use the config.properties file to set up our global variables...
    try {

      prop = new Properties();
      FileInputStream fis = new FileInputStream(
          System.getProperty("user.dir") + "/src/main/java/zacksolutions/config/config.properties");
      prop.load(fis);

    } catch (IOException e) {
      // TODO: handle exception
      e.printStackTrace();
    }

  }

  @Parameters("browser")
  public void BrowserInit(String browser) {
    // our EXTENTREPORTS SETUP!

    String path = System.getProperty("user.dir") + "/reports/index.html";
    ExtentSparkReporter spark = new ExtentSparkReporter(path);
    spark.config().setDocumentTitle("Zen Test Case");
    spark.config().setReportName("Zenful");
    extent = new ExtentReports();
    extent.attachReporter(spark);
    extent.setSystemInfo("Tester ID: ", "Sami");

    if (browser.equalsIgnoreCase("chrome")) {
      ChromeOptions options = new ChromeOptions();
      try {
        driver = new RemoteWebDriver(new URL("http://192.168.1.215:4444/wd/hub"), options);
      } catch (MalformedURLException e) {
        e.printStackTrace();
        // TODO: handle exception
      }
    } else if (browser.equalsIgnoreCase("firefox")) {
      FirefoxOptions options = new FirefoxOptions();
      try {
        driver = new RemoteWebDriver(new URL("http://192.168.1.215:4444/wd/hub"), options);
      } catch (MalformedURLException e) {
        // TODO: handle exception
        e.printStackTrace();
      }
    } else {
      throw new IllegalArgumentException("Unsupported browser: " + browser);
    }

    //
    // // conditioning our WebDriver with an if statement
    // String browsername = prop.getProperty("browserF");
    //
    // // launching FireFox
    // if (browsername.equalsIgnoreCase("firefox")) {
    // // System.setProperty("web-driver.gecko.driver","user.dir" +
    // // "/drivers/geckodriver");
    // // driver = new FirefoxDriver();
    // FirefoxOptions options = new FirefoxOptions();
    // options.addArguments("--headless");
    // driver = new FirefoxDriver(options);
    // }
    //
    // // launching Chrome
    // if (browsername.equalsIgnoreCase("chrome")) {
    // // System.setProperty("web-driver.gecko.driver", "user.dir" +
    // // "/drivers/chromedriver");
    // // driver = new ChromeDriver();
    // ChromeOptions options = new ChromeOptions();
    // options.addArguments("--headless");
    // driver = new ChromeDriver(options);
    // }
    driver.get(prop.getProperty("url"));
    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
  }
}
