import {
  type Page,
  type Locator,
  test as base,
  expect,
} from "@playwright/test";

export class AuthPage {
  public readonly wrongCredentials: Locator;

  constructor(public readonly page: Page) {
    this.wrongCredentials = this.page.locator("div.wrong");
  }

  async goto() {
    await this.page.goto("/login");
  }

  async loginAs(username = "admin", password = "admin") {
    await this.page.getByPlaceholder("Username").fill(username);
    await this.page.getByPlaceholder("Password").fill(password);
    await this.page.getByRole("button", { name: "Login" }).click();
  }

  async logout() {
    await this.page.getByRole("button", { name: "Logout" }).click();
  }
}

const test = base.extend<{ authPage: AuthPage }>({
  authPage: async ({ page }, use) => {
    const authPage = new AuthPage(page);
    await authPage.goto();
    await authPage.loginAs();
    await use(authPage);
    // await authPage.logout();
  },
});

export { test, expect };