import { Page, Locator } from '@playwright/test';

export class DashboardPage {
  readonly page: Page;
  readonly userInfo: Locator;
  readonly userManagementLink: Locator;
  readonly roleManagementLink: Locator;
  readonly menuManagementLink: Locator;
  readonly systemConfigLink: Locator;
  readonly noticeManagementLink: Locator;
  readonly fileManagementLink: Locator;
  readonly operationLogLink: Locator;
  readonly loginLogLink: Locator;
  readonly dictionaryLink: Locator;

  constructor(page: Page) {
    this.page = page;
    this.userInfo = page.locator('.el-avatar');
    this.userManagementLink = page.locator('.el-menu-item:has-text("用户管理")');
    this.roleManagementLink = page.locator('.el-menu-item:has-text("角色管理")');
    this.menuManagementLink = page.locator('.el-menu-item:has-text("菜单管理")');
    this.systemConfigLink = page.locator('.el-menu-item:has-text("参数配置")');
    this.noticeManagementLink = page.locator('.el-menu-item:has-text("通知公告")');
    this.fileManagementLink = page.locator('.el-menu-item:has-text("文件列表")');
    this.operationLogLink = page.locator('.el-menu-item:has-text("操作日志")');
    this.loginLogLink = page.locator('.el-menu-item:has-text("登录日志")');
    this.dictionaryLink = page.locator('.el-menu-item:has-text("字典管理")');
  }

  async goto() {
    await this.page.goto('/dashboard');
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToUserManagement() {
    const systemMenu = this.page.locator('.el-sub-menu__title:has-text("系统管理")');
    await systemMenu.click();
    await this.page.waitForTimeout(1000);
    await this.userManagementLink.click();
    await this.page.waitForURL('**/users', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToRoleManagement() {
    const systemMenu = this.page.locator('.el-sub-menu__title:has-text("系统管理")');
    await systemMenu.click();
    await this.page.waitForTimeout(1000);
    await this.roleManagementLink.click();
    await this.page.waitForURL('**/roles', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToMenuManagement() {
    const systemMenu = this.page.locator('.el-sub-menu__title:has-text("系统管理")');
    await systemMenu.click();
    await this.page.waitForTimeout(1000);
    await this.menuManagementLink.click();
    await this.page.waitForURL('**/menus', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToSystemConfig() {
    const configMenu = this.page.locator('.el-sub-menu__title:has-text("系统配置")');
    await configMenu.click();
    await this.page.waitForTimeout(1000);
    await this.systemConfigLink.click();
    await this.page.waitForURL('**/sys/config', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToNoticeManagement() {
    const notifyMenu = this.page.locator('.el-sub-menu__title:has-text("通知中心")');
    await notifyMenu.click();
    await this.page.waitForTimeout(1000);
    await this.noticeManagementLink.click();
    await this.page.waitForURL('**/notice', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToFileManagement() {
    const fileMenu = this.page.locator('.el-sub-menu__title:has-text("文件管理")');
    await fileMenu.click();
    await this.page.waitForTimeout(1000);
    await this.fileManagementLink.click();
    await this.page.waitForURL('**/files', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToAudit() {
    const auditMenu = this.page.locator('.el-sub-menu__title:has-text("审计中心")');
    await auditMenu.click();
    await this.page.waitForTimeout(1000);
  }

  async navigateToOperationLog() {
    await this.navigateToAudit();
    await this.operationLogLink.click();
    await this.page.waitForURL('**/oplog', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToLoginLog() {
    await this.navigateToAudit();
    await this.loginLogLink.click();
    await this.page.waitForURL('**/loginlog', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToNotification() {
    const notifyMenu = this.page.locator('.el-sub-menu__title:has-text("通知中心")');
    await notifyMenu.click();
    await this.page.waitForTimeout(1000);
    await this.noticeManagementLink.click();
    await this.page.waitForURL('**/notification', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async navigateToDictionary() {
    const configMenu = this.page.locator('.el-sub-menu__title:has-text("系统配置")');
    await configMenu.click();
    await this.page.waitForTimeout(1000);
    await this.dictionaryLink.click();
    await this.page.waitForURL('**/dict', { timeout: 30000 });
    await this.page.waitForLoadState('networkidle');
  }

  async getUsername(): Promise<string | null> {
    return await this.userInfo.textContent();
  }
}
