// apps/web/e2e/pages/login.page.ts
import type { Page } from '@playwright/test';

export class LoginPage {
  readonly page: Page;

  constructor(page: Page) {
    this.page = page;
  }

  async goto() {
    await this.page.goto('/#/login');
    await this.page.waitForSelector('.ant-card, .ant-form');
  }

  async fillUsername(username: string) {
    await this.page.fill('input[id="username"], input[placeholder*="用户名"]', username);
  }

  async fillPassword(password: string) {
    await this.page.fill('input[type="password"]', password);
  }

  async clickSubmit() {
    await this.page.click('button[type="submit"]');
  }

  async login(username: string, password: string) {
    await this.goto();
    await this.fillUsername(username);
    await this.fillPassword(password);
    await this.clickSubmit();
  }

  async getErrorMessage(): Promise<string> {
    const el = this.page.locator('.ant-form-item-explain-error, .ant-message-error, .ant-alert-error');
    return el.first().textContent() ?? '';
  }

  async isLoggedIn(): Promise<boolean> {
    try {
      await this.page.waitForURL('**/#/', { timeout: 5000 });
      return true;
    } catch {
      return false;
    }
  }
}
