/// <reference types="cypress" />
describe('OrderCatalog', () => {
    beforeEach(() => {
        cy.login('developer');
        cy.viewport(1920, 720);
        cy.visit('/#/order/8/catalog');
    });

    const checkCustomFilterTag = (filterName = 'Plant') => {
        cy.dataCy('catalogFilterCustomTag').should('exist');
        cy.dataCy('catalogFilterCustomTag').contains(filterName);
    };

    const checkFilterTag = (filterName = 'Plant') => {
        cy.dataCy('vnFilterPanelChip').should('exist');
        cy.dataCy('vnFilterPanelChip').contains(filterName);
    };

    const selectCategory = (categoryIndex = 1, categoryName = 'Plant') => {
        cy.get(
            `div.q-page-container div:nth-of-type(${categoryIndex}) > [data-cy='catalogFilterCategory']`
        ).should('exist');
        cy.get(
            `div.q-page-container div:nth-of-type(${categoryIndex}) > [data-cy='catalogFilterCategory']`
        ).click();
        checkCustomFilterTag(categoryName);
    };

    const searchByCustomTagInput = (option) => {
        cy.dataCy('catalogFilterValueInput').find('input').last().focus();
        cy.dataCy('catalogFilterValueInput').find('input').last().type(option);
        cy.dataCy('catalogFilterValueInput').find('input').last().type('{enter}');
        checkCustomFilterTag(option);
    };

    const selectTypeFilter = (option) => {
        cy.selectOption(
            'div.q-page-container div.list > div:nth-of-type(2) div:nth-of-type(3)',
            option
        );
        checkFilterTag(option);
    };

    it('Shows empty state', () => {
        cy.dataCy('orderCatalogPage').should('exist');
        cy.dataCy('orderCatalogPage').contains('No data to display');
    });

    it('filter by category', () => {
        selectCategory();
        cy.dataCy('orderCatalogItem').should('exist');
    });

    it('filters by type', () => {
        selectCategory();
        selectTypeFilter('Anthurium');
    });

    it('filters by custom value select', () => {
        selectCategory();
        searchByCustomTagInput('Silver');
    });

    it('filters by custom value dialog', () => {
        Cypress.on('uncaught:exception', (err) => {
            if (err.message.includes('canceled')) {
                return false;
            }
        });
        selectCategory();
        cy.dataCy('catalogFilterValueDialogBtn').should('exist');
        cy.dataCy('catalogFilterValueDialogBtn').last().click();
        cy.dataCy('catalogFilterValueDialogTagSelect').should('exist');
        cy.selectOption("[data-cy='catalogFilterValueDialogTagSelect']", 'Tallos');
        cy.dataCy('catalogFilterValueDialogValueInput').find('input').focus();
        cy.dataCy('catalogFilterValueDialogValueInput').find('input').type('2');
        cy.dataCy('catalogFilterValueDialogValueInput').find('input').type('{enter}');
        checkCustomFilterTag('2');
    });

    it('removes a secondary tag', () => {
        selectCategory();
        selectTypeFilter('Anthurium');
        cy.dataCy('vnFilterPanelChip').should('exist');
        cy.get(
            "div.q-page-container [data-cy='vnFilterPanelChip'] > i.q-chip__icon--remove"
        )
            .contains('cancel')
            .should('exist');
        cy.get(
            "div.q-page-container [data-cy='vnFilterPanelChip'] > i.q-chip__icon--remove"
        )
            .contains('cancel')
            .click();
        cy.dataCy('vnFilterPanelChip').should('not.exist');
    });

    it('Removes category tag', () => {
        selectCategory();
        cy.get(
            "div.q-page-container [data-cy='catalogFilterCustomTag'] > i.q-chip__icon--remove"
        )
            .contains('cancel')
            .should('exist');
        cy.get(
            "div.q-page-container [data-cy='catalogFilterCustomTag'] > i.q-chip__icon--remove"
        )
            .contains('cancel')
            .click();
        cy.dataCy('catalogFilterCustomTag').should('not.exist');
    });
});
