import { expect, type Locator, type Page } from '@playwright/test';
import { BasePage } from './BasePage';
import { ICustomerDetails } from '@business-logic/types/CustomerDetails';

export class BailoutPage extends BasePage {
    readonly page: Page;
    readonly firstNameTextBox: Locator;
    readonly lastNameTextBox: Locator;
    readonly phoneNumberTextBox: Locator;
    readonly emailAddressTextBox: Locator;

    issPageValue = 'bailout-page';

    constructor(page: Page) {
        super(page);
        this.page = page;
        this.firstNameTextBox = this.page.locator('#firstNameField');
        this.lastNameTextBox = this.page.locator('#lastNameField');
        this.phoneNumberTextBox = this.page.locator('#phoneNumberField');
        this.emailAddressTextBox = this.page.locator('#emailAddressField');
        // this.page.waitForLoadState();
        // this.validateURL(this.url);
    }

    async validateBailoutDetails(customerDetails: ICustomerDetails, bailoutCode: number) {

        await this.firstNameTextBox.waitFor({state:'visible'});
        await expect.soft(this.firstNameTextBox).toHaveValue(customerDetails.firstName);
        await expect.soft(this.lastNameTextBox).toHaveValue(customerDetails.lastName);
        await expect.soft(this.phoneNumberTextBox).toHaveValue(customerDetails.phoneNumber);
        await expect.soft(this.emailAddressTextBox).toHaveValue(customerDetails.email);
        await expect.soft(await this.getBailoutCode()).toEqual(bailoutCode);
    }

    async validateBailoutDetailsNotNull(){
        await this.firstNameTextBox.waitFor({state:'visible'})
        expect(this.firstNameTextBox.inputValue()).not.toBe('');
        expect(this.lastNameTextBox.inputValue()).not.toBe('');
        expect(this.phoneNumberTextBox.inputValue()).not.toBe('');
        expect(this.emailAddressTextBox.inputValue()).not.toBe('');
    }

    async getBailoutCode() {
        const mainLocalStorage = JSON.parse(await this.page.evaluate('localStorage.getItem(\'main\')'));
        const bailoutCode = mainLocalStorage.applicationUser.pageData['bailout-page'].bailoutCode as number;
        return bailoutCode;
    }

}