import * as moment from 'moment';

describe('Онлайн табло: Вылет', () => {
    const departureCity = {
        name: 'Анапа',
        code: 'AAQ',
        latitude: 44.8857008,
        longitude: 37.3199191,
    };
    const today = moment().format('DD.MM.YYYY');
    const expectedUrlDateTime = `${moment().format('DDMMYYYY')}-0000-2400`;

    beforeEach(() => {
        cy.intercept('GET', '**api/flights/v1.1/ru/board**').as('getFlights');
        cy.forbidGeolocation();
        cy.visit('/');
        cy.getByTestId('departure-filter').click();
    });

    const assertSearchResults = () => {
        cy.getByTestId('loader').should('be.visible');
        cy.wait('@getFlights').then(() => {
            cy.getByTestId('board-search-result').should('be.visible');
            cy.getByTestId('flight-result').should('have.length.at.least', 1);
        });
    };

    it(`Должен искать рейсы (${departureCity.name} - ручной ввод), открывать корректный URL и детали рейса`, () => {
        cy.getByTestId('departure-city-input').type(`${departureCity.name}`);
        cy.getByTestId('calendar-input').type(today).type('{enter}');
        cy.getByTestId('city-code').contains(`${departureCity.code}`).should('be.visible');

        cy.getByTestId('departure-search-button').click();
        cy.url().should('include', `ru-ru/onlineboard/departure/${departureCity.code}/${expectedUrlDateTime}`);

        assertSearchResults();

        cy.getByTestId('flight-result')
            .first()
            .getByTestId('flight-carrier-number')
            .should('be.visible')
            .getByTestId('flight-company-logo')
            .should('be.visible');

        cy.getByTestId('flight-details-button').click();
        cy.getByTestId('flight-details-number').should('be.visible');
        cy.getByTestId('flight-company-logo').should('be.visible');
    });

    it(`Должен искать рейсы (${departureCity.name} - выбор из списка)`, () => {
        cy.getByTestId('calendar-input').type(today).type('{enter}');
        cy.getByTestId('autocomplete-popup-button').click();
        cy.getByTestId(`city-name-cell-${departureCity.name}`).click();

        cy.getByTestId('city-code').contains(`${departureCity.code}`).should('be.visible');

        cy.getByTestId('departure-search-button').click();

        assertSearchResults();
    });
});
