import { test, expect, Page } from '@playwright/test';
import { strictEqual } from 'assert';
import { exec } from 'child_process';
import { log } from 'console';
import { writeFileSync } from 'fs';

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 Personnel - พนักงาน', async () => {
  await page.click('id=menu-icon-personnel-management');

  try {
    // เข้าสู่หน้าแก้ไขพนักงาน
    await page.click("(//div[@role='tab'])[2]");
    await page.waitForSelector('id=btn-kebab-action-employeem', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-employeem');

    // ตรวจสอบการคลิกว่าได้มีการคลิกหรือการแสดงจริงหรือไม่
    // const isElementVisible = await page.isVisible(
    //   'id=btn-kebab-edit-employeem',
    // );
    // console.log('Element visibility:', isElementVisible);

    await page.click('id=btn-kebab-edit-employeem');

    // แก้ไขข้อมูล
    await page.fill('id=drawer-info-personnel-input-first-name', 'อานน');
    await page.fill('id=drawer-info-personnel-input-last-name', 'รักมาก');
    await page.fill('id=drawer-info-personnel-input-first-name-en', 'Arnon');
    await page.fill('id=drawer-info-personnel-input-last-name-en', 'Rakmak');
    await page.click('id=btn-info-basic-save'); // คลิกปุ่มบันทึก

    // ตรวจสอบหลังแก้ไขเสร็จ
    await page.waitForSelector('id=btn-kebab-action-employeem', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-employeem');
    await page.waitForSelector('id=btn-kebab-view-detail-employeem', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-view-detail-employeem');

    // ตรวจสอบข้อมูลว่าทำการแก้ไขถูกหรือไม่
    const detailEditFistName = await page.inputValue("//input[@value='อานน']");
    const detailEditLastName = await page.inputValue(
      "//input[@value='รักมาก']",
    );
    const detailEditFistNameEn = await page.inputValue(
      "//input[@value='Arnon']",
    );
    const detailEditLastNameEn = await page.inputValue(
      "//input[@value='Rakmak']",
    );

    await expect(detailEditFistName).toBe('อานน');
    await expect(detailEditLastName).toBe('รักมาก');
    await expect(detailEditFistNameEn).toBe('Arnon');
    await expect(detailEditLastNameEn).toBe('Rakmak');

    console.log('ตรวจสอบการแก้ไขข้อมูลพนักงานถูกต้อง');
  } catch (error) {
    console.log('เกิดข้อผิดพลาดในการทดสอบแก้ไขบุคลากร');
    throw error;
  }
  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});

test('Edit Personnel - พนักงานส่งเอกสาร', async () => {
  try {
    // เข้าสู่หน้าแก้ไขพนักงาน
    await page.click("(//div[@role='tab'])[3]");
    await page.click('id=btn-kebab-action-courierw');
    await page.click('id=btn-kebab-edit-courierw');

    // แก้ไขข้อมูล
    await page.fill('id=drawer-info-personnel-input-first-name', 'ลาดา');
    await page.fill('id=drawer-info-personnel-input-last-name', 'มดา');
    await page.fill('id=drawer-info-personnel-input-first-name-en', 'Lada');
    await page.fill('id=drawer-info-personnel-input-last-name-en', 'Mada');
    await page.click('id=btn-info-basic-save'); // คลิกปุ่มบันทึก

    // ตรวจสอบหลังแก้ไขเสร็จ
    await page.waitForSelector('id=btn-kebab-action-courierw', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-courierw');
    await page.waitForSelector('id=btn-kebab-view-detail-courierw', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-view-detail-courierw');

    // ตรวจสอบข้อมูลว่าทำการแก้ไขถูกหรือไม่
    const detailEditFistName = await page.inputValue("//input[@value='ลาดา']");
    const detailEditLastName = await page.inputValue("//input[@value='มดา']");
    const detailEditFistNameEn = await page.inputValue(
      "//input[@value='Lada']",
    );
    const detailEditLastNameEn = await page.inputValue(
      "//input[@value='Mada']",
    );

    await expect(detailEditFistName).toBe('ลาดา');
    await expect(detailEditLastName).toBe('มดา');
    await expect(detailEditFistNameEn).toBe('Lada');
    await expect(detailEditLastNameEn).toBe('Mada');

    console.log('ตรวจสอบการแก้ไขข้อมูลพนักงานส่งเอกสารถูกต้อง');
  } catch (error) {
    console.log('เกิดข้อผิดพลาดในการทดสอบแก้ไขบุคลากร');
    throw error;
  }
  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});

test('Edit Personnel - ตัวแทน', async () => {
  try {
    // เข้าสู่หน้าแก้ไขพนักงาน
    await page.click("(//div[@role='tab'])[4]");
    await page.click('id=btn-kebab-action-delegatem');
    await page.click('id=btn-kebab-edit-delegatem');

    // แก้ไขข้อมูล
    await page.fill('id=drawer-info-personnel-input-first-name', 'ธนกร');
    await page.fill('id=drawer-info-personnel-input-last-name', 'ลอยฟ้า');
    await page.fill(
      'id=drawer-info-personnel-input-first-name-en',
      'Thanakorn',
    );
    await page.fill('id=drawer-info-personnel-input-last-name-en', 'Loifa');
    await page.click('id=btn-info-basic-save'); // คลิกปุ่มบันทึก

    // ตรวจสอบหลังแก้ไขเสร็จ
    await page.waitForSelector('id=btn-kebab-action-delegatem', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-delegatem');
    await page.waitForSelector('id=btn-kebab-view-detail-delegatem', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-view-detail-delegatem');

    // ตรวจสอบข้อมูลว่าทำการแก้ไขถูกหรือไม่
    const detailEditFistName = await page.inputValue("//input[@value='ธนกร']");
    const detailEditLastName = await page.inputValue(
      "//input[@value='ลอยฟ้า']",
    );
    const detailEditFistNameEn = await page.inputValue(
      "//input[@value='Thanakorn']",
    );
    const detailEditLastNameEn = await page.inputValue(
      "//input[@value='Loifa']",
    );

    await expect(detailEditFistName).toBe('ธนกร');
    await expect(detailEditLastName).toBe('ลอยฟ้า');
    await expect(detailEditFistNameEn).toBe('Thanakorn');
    await expect(detailEditLastNameEn).toBe('Loifa');

    console.log('ตรวจสอบการแก้ไขข้อมูลตัวแทนถูกต้อง');
  } catch (error) {
    console.log('เกิดข้อผิดพลาดในการทดสอบแก้ไขบุคลากร');
    throw error;
  }
  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});

test('Edit Personnel - เอเจนซี่', async () => {
  try {
    // เข้าสู่หน้าแก้ไขพนักงาน
    await page.click("(//div[@role='tab'])[5]");
    await page.waitForTimeout(2000);
    await page.waitForSelector('id=btn-kebab-action-agencyw', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-agencyw');
    await page.click('id=btn-kebab-edit-agencyw');

    // แก้ไขข้อมูล
    await page.fill('id=drawer-info-personnel-input-first-name', 'นิดา');
    await page.fill('id=drawer-info-personnel-input-last-name', 'อามา');
    await page.fill('id=drawer-info-personnel-input-first-name-en', 'Nida');
    await page.fill('id=drawer-info-personnel-input-last-name-en', 'Arma');
    await page.click('id=btn-info-basic-save'); // คลิกปุ่มบันทึก

    // ตรวจสอบหลังแก้ไขเสร็จ
    await page.waitForSelector('id=btn-kebab-action-agencyw', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-action-agencyw');
    await page.waitForSelector('id=btn-kebab-view-detail-agencyw', {
      state: 'visible',
    });
    await page.click('id=btn-kebab-view-detail-agencyw');

    // ตรวจสอบข้อมูลว่าทำการแก้ไขถูกหรือไม่
    const detailEditFistName = await page.inputValue("//input[@value='นิดา']");
    const detailEditLastName = await page.inputValue("//input[@value='อามา']");
    const detailEditFistNameEn = await page.inputValue(
      "//input[@value='Nida']",
    );
    const detailEditLastNameEn = await page.inputValue(
      "//input[@value='Arma']",
    );

    await expect(detailEditFistName).toBe('นิดา');
    await expect(detailEditLastName).toBe('อามา');
    await expect(detailEditFistNameEn).toBe('Nida');
    await expect(detailEditLastNameEn).toBe('Arma');

    console.log('ตรวจสอบการแก้ไขข้อมูลเอเจนซี่ถูกต้อง');
  } catch (error) {
    console.log('เกิดข้อผิดพลาดในการทดสอบแก้ไขบุคลากร');
    throw error;
  }
  await page.waitForTimeout(4000);
  await page.click('id=btn-info-close');
});
