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

export class EndorsementsPage extends InsuranceBasePage {
    readonly page: Page;
    readonly educatorYesButton: Locator;
    readonly educatorNoButton: Locator;
    url = process.env['BASE_URL']! + '/FixMyGlass/PolicyEndorsements.aspx';

    constructor(page: Page) {
        super(page);
        this.page = page;
        this.educatorYesButton = this.page.getByRole('link', { name: 'Yes' });
        this.educatorNoButton = this.page.getByRole('link', { name: 'Yes' });
    }

    async verifyEndorsements(endorsements: IEndorsementDetails[]) {
        for (const endorsement of endorsements) {
            switch(endorsement.endorsementType) {
                case EndorsementType.Educator:
                    if (endorsement.isOnPolicy) {
                        await expect.soft(this.educatorYesButton).toBeAttached();
                    } else {
                        await expect.soft(this.educatorYesButton).not.toBeAttached();
                    }
                    break;
                case EndorsementType.EmployeeParking:
                    // TODO: Implement
                    break;
            }
        }
    }

    async selectEndorsements(endorsements: IEndorsementDetails[]) {
        for (const endorsement of endorsements) {
            if (endorsement.isOnPolicy) {
                switch (endorsement.endorsementType) {
                    case EndorsementType.Educator:
                        if (endorsement.isClickYes) {
                            await this.educatorYesButton.click();
                        } else {
                            await this.educatorNoButton.click();
                        }
                        break;
                    case EndorsementType.EmployeeParking:
                        // TODO: Implement
                        break;
                }
            }
        }
    }
}