
import { test, expect } from "@playwright/test";
import { CheckoutPage } from "../../page/checkout-page";
import { CartPage } from "../../page/cart-page";
import { ProductPage } from "../../page/product-page";
import { HomePage } from "../../page/home-page";
import { allowAllCookies, closeNewsletterPopup, closeWheel, handlePopupDiscount } from "../../src/core/popup";
import { randomString } from "../../helper/random.string";
import { launchBrowserWithISPProxy } from "../../helper/lauch.proxy";
import { attachGeoLocation } from "../../helper/attach.geo";

let checkoutPage: CheckoutPage;
let homePage: HomePage;
let productPage: ProductPage;
let cartPage: CartPage;

// test.describe("SHOP PAY PAYMENT", () => {
//   test.beforeEach(async ({ page }) => {
//     checkoutPage = new CheckoutPage(page);
//     homePage = new HomePage(page);
//     productPage = new ProductPage(page);
//     cartPage = new CartPage(page);

//     await homePage.goToHomePage("https://fra.perifit.co");
//     await homePage.page.locator(homePage.xpathAnnouncementBar).click();
//   });

//   test('Checkout with Shoppay in Product page', {
//     annotation: {
//       type: 'SPE_PRD',
//       description: 'Checkout with Shoppay in Product page'
//     }
//   }, async ({ page }) => {
//     await test.step("Navigate to Product page", async () => {
//       const firstProduct = page.locator(productPage.xpathFirstProductInCollection).first();
//       await firstProduct.click();
//       await productPage.closePopUpSale();
//     });

//     await test.step("Checkout order with Shoppay", async () => {
//       await productPage.buyWithShopPay();

//       const isCapchaDisplayed = await checkoutPage.checkElementAttached(checkoutPage.xpathBtnChangeShopPayPayment, checkoutPage.page.frameLocator(checkoutPage.xpathIframeShopPayPayment));
//       expect(isCapchaDisplayed).toBeTruthy();
//     });
//   });

//   test('Checkout with Shoppay in Cart page', {
//     annotation: {
//       type: 'SPE_CRT',
//       description: 'Checkout with Shoppay in Cart page'
//     }
//   }, async ({ page }) => {
//     await test.step("Add product to cart", async () => {
//       const firstProduct = page.locator(productPage.xpathFirstProductInCollection).first();
//       await firstProduct.click();
//       await productPage.clickBtnAddToCart();
//     });

//     await test.step("Checkout order with Shoppay", async () => {
//       await cartPage.buyWithShopPay();

//       const isCapchaDisplayed = await checkoutPage.checkElementAttached(checkoutPage.xpathBtnChangeShopPayPayment, checkoutPage.page.frameLocator(checkoutPage.xpathIframeShopPayPayment));
//       expect(isCapchaDisplayed).toBeTruthy();
//     });
//   });

//   test('Checkout with Shoppay in Checkout page', {
//     annotation: {
//       type: 'SPE_COP',
//       description: 'Checkout with Shoppay in Checkout page'
//     }
//   }, async ({ page }) => {
//     const email = "for.test.perifit@gmail.com";
//     await test.step("Add product to cart", async () => {
//       const firstProduct = page.locator(productPage.xpathFirstProductInCollection).first();
//       await firstProduct.click();
//       await productPage.clickBtnAddToCart();
//     });

//     await test.step("Click checkout", async () => {
//       await cartPage.clickBtnCheckout();
//     });

//     await test.step("Checkout order with ShopPay Express", async () => {
//       await checkoutPage.checkoutWithShopPayExpress(email);

//       const isCapchaDisplayed = await checkoutPage.checkElementAttached(checkoutPage.xpathBtnChangeShopPayPayment, checkoutPage.page.frameLocator(checkoutPage.xpathIframeShopPayPayment));
//       expect(isCapchaDisplayed).toBeTruthy();
//     });
//   });

//   test('Checkout with Shop pay Credit Card in Checkout page', {
//     annotation: {
//       type: 'SPE_COP',
//       description: 'Checkout with Shop pay Credit Card in Checkout page'
//     }
//   }, async ({ page }) => {
//     await test.step("Add product to cart", async () => {
//       const firstProduct = page.locator(productPage.xpathFirstProductInCollection).first();
//       await firstProduct.click();
//       await productPage.clickBtnAddToCart();
//     });

//     await test.step("Click checkout", async () => {
//       await cartPage.clickBtnCheckout();
//     });

//     await test.step("Fill checkout info", async () => {
//       const shippingAddress = checkoutPage.shippingAddress;
//       await checkoutPage.fillCheckoutInfo(shippingAddress);
//     });

//     await test.step("Complete order with Shop pay", async () => {
//       await checkoutPage.page.waitForSelector(checkoutPage.xpathHeadingPayment);
//       await checkoutPage.uncheckRememberMe();
//       await checkoutPage.checkoutWithShopPay();
//     });

//     await test.step("Verify message after checkout with Credit Card", async () => {
//       await checkoutPage.page.waitForSelector(checkoutPage.xpathErrorMessage);
//       const isDisplayed = await checkoutPage.page.locator(checkoutPage.xpathErrorMessage).isVisible();
//       expect(isDisplayed).toBeTruthy();
//     });
//   });
// });

test.describe("@COF_FR PAYPAL PAYMENT", {
  tag: ["@COF_FR", "@COF_FR_PP"]
}, () => {
  test.beforeEach(async ({ }, testInfo) => {
    const sessionID = randomString(10);
    const { page } = await launchBrowserWithISPProxy(sessionID, 'fr');
    checkoutPage = new CheckoutPage(page);
    homePage = new HomePage(page);
    productPage = new ProductPage(page);
    cartPage = new CartPage(page);
    await homePage.page.goto("https://it.perifit.co", { waitUntil: 'domcontentloaded' });
    await expect(page).toHaveURL(/fr\.perifit\.co/, { timeout: 15_000 });

    //Attach geo location to the report
    await attachGeoLocation(page, testInfo);

    await closeNewsletterPopup(page);
    await handlePopupDiscount(page);
    await allowAllCookies(page);
    await closeWheel(page);
  });

  test('FR - PayPal express - Cart Drawer Checkout with PayPal express in Checkout page', {
    annotation: {
      type: 'PPE_CRT',
      description: 'Checkout with PayPal express in Cart page'
    },
    tag: ["@COF_FR_PPE_CRT"]
  }, async () => {
    await test.step("Add product to cart", async () => {
      const firstProduct = await homePage.page.locator(productPage.xpathFirstProductInCollection).first();
      await firstProduct.click();
      await productPage.clickBtnAddToCart();
    });

    await test.step("Checkout order with PayPal express", async () => {
      await expect(cartPage.cartLoc.xpahtBtnCheckoutCartDrawer).toBeVisible();
      await cartPage.page.waitForTimeout(3_000);
      await cartPage.cartLoc.xpahtBtnCheckoutCartDrawer.click();
      const logoDisplayed = await cartPage.buyWithPaypalInCheckout();
      expect(logoDisplayed).toBeTruthy();
    });
  });

  // test('FR - PayPal express - Checkout with PayPal express in Checkout page', {
  //   annotation: {
  //     type: 'PPE_COP',
  //     description: 'Checkout with PayPal express in Checkout page'
  //   },
  //   tag: ["@COF_FR_PPE_COP"]
  // }, async () => {
  //   await test.step("Add product to cart", async () => {
  //     const firstProduct = homePage.page.locator(productPage.xpathFirstProductInCollection).first();
  //     await firstProduct.click();
  //     await cartPage.page.waitForTimeout(5000);
  //     await productPage.clickBtnAddToCart();
  //   });

  //   await test.step("Click checkout", async () => {
  //     await cartPage.clickBtnCheckout();
  //   });

  //   await test.step("Checkout order with PayPal Express", async () => {
  //     const logoDisplayed = await checkoutPage.checkoutWithPayPalExpress();
  //     expect(logoDisplayed).toBeTruthy();
  //   });
  // });

  test('FR - PayPal Standard - Checkout with PayPal Standard in Checkout page', {
    annotation: {
      type: 'PP_COP',
      description: 'Checkout with PayPal'
    },
    tag: ["@COF_FR_PP_COP"]
  }, async () => {
    test.setTimeout(180_000);

    await test.step("Add product to cart", async () => {
      const firstProduct = await homePage.page.locator(productPage.xpathFirstProductInCollection).first();
      await firstProduct.click();
      await productPage.clickBtnAddToCart();
    });

    await test.step("Click checkout", async () => {
      // await cartPage.clickBtnCheckout();
      await expect(cartPage.cartLoc.xpahtBtnCheckoutCartDrawer).toBeVisible();
      await cartPage.page.waitForTimeout(3_000);
      await cartPage.cartLoc.xpahtBtnCheckoutCartDrawer.click();
      await cartPage.page.waitForTimeout(5_000);
    });

    await test.step("Fill checkout info", async () => {
      const shippingAddress = checkoutPage.shippingAddress;
      await checkoutPage.fillCheckoutInfo(shippingAddress);
    });

    await test.step("Complete order with PayPal", async () => {
      await checkoutPage.page.waitForSelector(checkoutPage.xpathHeadingPayment);
      const logoDisplayed = await checkoutPage.checkoutWithPaypal();
      expect(logoDisplayed).toBeTruthy();
    });
  });
});