import { expect } from '@playwright/test';
import { CellPageObject } from '.';
import BasePage from '../../../Base';

export class RatingCellPageObject extends BasePage {
  readonly cell: CellPageObject;

  constructor(cell: CellPageObject) {
    super(cell.rootPage);
    this.cell = cell;
  }

  get({ index, columnHeader }: { index?: number; columnHeader: string }) {
    return this.cell.get({ index, columnHeader });
  }

  async select({ index, columnHeader, rating }: { index?: number; columnHeader: string; rating: number }) {
    await this.get({ index, columnHeader }).scrollIntoViewIfNeeded();
    await this.waitForResponse({
      uiAction: async () =>
        await this.get({ index, columnHeader })
          .locator('.ant-rate-star > div')
          .nth(rating - 1)
          .click(),
      httpMethodsToMatch: ['POST', 'PATCH'],
      requestUrlPathToMatch: 'api/v1/db/data/noco/',
    });
  }

  async verify({ index, columnHeader, rating }: { index: number; columnHeader: string; rating: number }) {
    const cell = this.get({ index, columnHeader });
    await cell.scrollIntoViewIfNeeded();
    await expect(cell.locator(`li.ant-rate-star.ant-rate-star-full`)).toHaveCount(rating);
  }
}
