import { test, expect, Page } from '@playwright/test';
import { strictEqual } from 'assert';
import exp from 'constants';

let page: Page;

test.beforeAll(async ({ browser }) => {
  page = await browser.newPage();
});

test.afterAll(async () => {
  if (page !== undefined) {
    await page.close();
  }
});

test('Login', async () => {
  // Login
  await page.goto('http://192.168.1.90:20001/');
  await expect(page).toHaveTitle(/^Sign in to /);
  await page.fill("input[name='username']", 'admin');
  await page.fill("input[name='password']", '1234');
  await page.click('id=kc-login');
  await page.waitForTimeout(2000);
  //   await page.click('id=acceptBtn');
});

test('Edit Headquter Branch', async () => {
  try {
    // แก้ไขสำนักงานใหญ่
    await page.click('id=menu-icon-branch-management');
    await page.click('id=btn-kebab-action-บริษัท โคโม่ จำกัด');
    await page.click('id=btn-kebab-edit-บริษัท โคโม่ จำกัด');
    await page.fill('id=input-name', 'บริษัท โคโมโดะ จำกัด');
    await page.fill('id=input-name-en', 'COMODO');
    await page.click('id=btn-info-basic-save');

    //ตรวจสอบรายละเอียดการแก้ไข
    await page.click('id=btn-kebab-action-บริษัท โคโมโดะ จำกัด');
    await page.click('id=btn-kebab-view-detail-บริษัท โคโมโดะ จำกัด');

    //ตรวจสอบว่าได้ทำการแก้ไขถูกต้องหรือไม่
    const detailEditName = await page.inputValue(
      "//input[@value='บริษัท โคโมโดะ จำกัด']",
    );
    const detailEditNameEn = await page.inputValue(
      "//input[@aria-label='ชื่อสำนักงานใหญ่ (EN)']",
    );

    await expect(detailEditName).toBe('บริษัท โคโมโดะ จำกัด');
    await expect(detailEditNameEn).toBe('COMODO');

    console.log('ตรวจสอบการแก้ไขข้อมูลสำนักงานใหญ่ถูกต้อง');
  } catch (error) {
    console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
    throw error;
  }

  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});

test('Edit Sub Branch', async () => {
  try {
    // แก้ไขสำนักงานใหญ่
    await page.click("//div[@id='tree-enter-บริษัท โคโมโดะ จำกัด']/div[1]");
    await page.waitForSelector('id=btn-kebab-action-สีลม1', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-สีลม1');
    await page.waitForTimeout(1000);
    await page.click('id=btn-kebab-edit-สีลม1');
    await page.fill('id=input-name', 'สินสาทร');
    await page.fill('id=input-name-en', 'Sinsathorn');
    await page.click('id=btn-info-basic-save');

    //ตรวจสอบรายละเอียดการแก้ไข
    await page.click('id=btn-kebab-action-สินสาทร');
    await page.click('id=btn-kebab-view-detail-สินสาทร');

    //ตรวจสอบว่าได้ทำการแก้ไขถูกต้องหรือไม่
    const detailEditName = await page.inputValue("//input[@value='สินสาทร']");
    const detailEditNameEn = await page.inputValue(
      "//input[@value='Sinsathorn']",
    );

    await expect(detailEditName).toBe('สินสาทร');
    await expect(detailEditNameEn).toBe('Sinsathorn');

    console.log('ตรวจสอบการแก้ไขข้อมูลสาขาถูกต้อง');
  } catch (error) {
    console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
    throw error;
  }

  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});

test('Edit Visual Branch', async () => {
  try {
    // แก้ไขสำนักงานใหญ่
    await page.click("//div[@id='tree-enter-บริษัท คาโมมายด์ จำกัด']/div[1]");
    await page.click('id=btn-kebab-action-บางรัก1');
    await page.click('id=btn-kebab-edit-บางรัก1');
    await page.fill('id=input-name', 'บางจาก');
    await page.fill('id=input-name-en', 'Bangjak');
    await page.click('id=btn-info-basic-save');

    //ตรวจสอบรายละเอียดการแก้ไข
    await page.click('id=btn-kebab-action-บางจาก');
    await page.click('id=btn-kebab-view-detail-บางจาก');

    //ตรวจสอบว่าได้ทำการแก้ไขถูกต้องหรือไม่
    const detailEditName = await page.inputValue("//input[@value='บางจาก']");
    const detailEditNameEn = await page.inputValue("//input[@value='Bangjak']");

    await expect(detailEditName).toBe('บางจาก');
    await expect(detailEditNameEn).toBe('Bangjak');

    console.log('ตรวจสอบการแก้ไขข้อมูลสาขาเสมือนถูกต้อง');
  } catch (error) {
    console.error('เกิดข้อผิดพลาดในการทดสอบ', error);
    throw error;
  }

  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});
