import config from '../helpers/config.js';
import createNightmare from '../helpers/nightmare';
import selectors from '../helpers/selectors.js';
import {catchErrors} from '../../services/utils/jasmineHelpers';
const nightmare = createNightmare();
const moduleAccessViewHashURL = '#!/';

describe('Edit basicData path', () => {
    describe('warm up', () => {
        it('should warm up login and fixtures', done => {
            nightmare
            .login()
            .waitForURL(moduleAccessViewHashURL)
            .waitToClick(selectors.globalItems.logOutButton)
            .then(() => {
                done();
            })
            .catch(catchErrors(done));
        });
    });

    it('should log in', done => {
        nightmare
        .login()
        .waitForURL(moduleAccessViewHashURL)
        .url()
        .then(url => {
            expect(url).toEqual(config.url + moduleAccessViewHashURL);
            done();
        })
        .catch(catchErrors(done));
    });

    it('should click on the Clients button of the top bar menu', done => {
        nightmare
        .waitToClick(selectors.globalItems.applicationsMenuButton)
        .wait(selectors.globalItems.applicationsMenuVisible)
        .waitToClick(selectors.globalItems.clientsButton)
        .wait(selectors.clientsIndex.createClientButton)
        .url()
        .then(url => {
            expect(url).toEqual(config.url + '#!/clients');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should search for the user Bruce Wayne', done => {
        nightmare
        .wait(selectors.clientsIndex.searchResult)
        .type(selectors.clientsIndex.searchClientInput, 'Bruce Wayne')
        .click(selectors.clientsIndex.searchButton)
        .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1)
        .countSearchResults(selectors.clientsIndex.searchResult)
        .then(result => {
            expect(result).toEqual(1);
            done();
        })
        .catch(catchErrors(done));
    });

    it('should click on the search result to access to the clients basic data', done => {
        nightmare
        .waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Wayne')
        .waitToClick(selectors.clientsIndex.searchResult)
        .waitForURL('basic-data')
        .url()
        .then(url => {
            expect(url).toContain('basic-data');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should edit the name', done => {
        nightmare
        .wait(selectors.basicData.nameInput)
        .clearInput(selectors.basicData.nameInput)
        .type(selectors.basicData.nameInput, 'Carol Danvers Edited')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the name have been edited', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.nameInput)
        .getInputValue(selectors.basicData.nameInput)
        .then(result => {
            expect(result).toEqual('Carol Danvers Edited');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should edit the tax number', done => {
        nightmare
        .wait(selectors.basicData.taxNumberInput)
        .clearInput(selectors.basicData.taxNumberInput)
        .type(selectors.basicData.taxNumberInput, 'AVG tax Edited')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the tax number have been edited', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.taxNumberInput)
        .getInputValue(selectors.basicData.taxNumberInput)
        .then(result => {
            expect(result).toEqual('AVG tax Edited');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should edit the social name', done => {
        nightmare
        .wait(selectors.basicData.socialNameInput)
        .clearInput(selectors.basicData.socialNameInput)
        .type(selectors.basicData.socialNameInput, 'Avengers Team Edited')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the social name have been edited', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.socialNameInput)
        .getInputValue(selectors.basicData.socialNameInput)
        .then(result => {
            expect(result).toEqual('Avengers Team Edited');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should add the landline phone number', done => {
        nightmare
        .wait(selectors.basicData.phoneInput)
        .clearInput(selectors.basicData.phoneInput)
        .type(selectors.basicData.phoneInput, '123456789')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the landline phone number have been added', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.phoneInput)
        .getInputValue(selectors.basicData.phoneInput)
        .then(result => {
            expect(result).toEqual('123456789');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should add the mobile phone number', done => {
        nightmare
        .wait(selectors.basicData.mobileInput)
        .clearInput(selectors.basicData.mobileInput)
        .type(selectors.basicData.mobileInput, '987654321')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the mobile phone number have been added', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.mobileInput)
        .getInputValue(selectors.basicData.mobileInput)
        .then(result => {
            expect(result).toEqual('987654321');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should add the fax number', done => {
        nightmare
        .wait(selectors.basicData.faxInput)
        .clearInput(selectors.basicData.faxInput)
        .type(selectors.basicData.faxInput, '432198765')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the fax number have been added', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.faxInput)
        .getInputValue(selectors.basicData.faxInput)
        .then(result => {
            expect(result).toEqual('432198765');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should edit the email', done => {
        nightmare
        .wait(selectors.basicData.emailInput)
        .clearInput(selectors.basicData.emailInput)
        .type(selectors.basicData.emailInput, 'CarolDanversEdited@verdnatura.es')
        .click(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the email have been edited', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.emailInput)
        .getInputValue(selectors.basicData.emailInput)
        .then(result => {
            expect(result).toEqual('CarolDanversEdited@verdnatura.es');
            done();
        })
        .catch(catchErrors(done));
    });

    // it('should select the sales person', done => {
    //     nightmare
    //     .wait(selectors.basicData.salesPersonInput)
    //     .select(selectors.basicData.salesPersonInput, '') // not working quite yet
    //     .click(selectors.basicData.saveButton)
    //     .wait(selectors.globalItems.snackbarIsActive)
    //     .getInnerText(selectors.globalItems.snackbarIsActive)
    //     .then(result => {
    //         expect(result).toEqual('¡Datos guardados!');
    //         done();
    //     })
    //     .catch(catchErrors(done));
    // });

    it('should select the channel', done => {
        nightmare
        .waitToClick(selectors.basicData.channelInput)
        .waitToClick(selectors.basicData.channelMetropolisOption)
        .waitToClick(selectors.basicData.saveButton)
        .wait(selectors.globalItems.snackbarIsActive)
        .getInnerText(selectors.globalItems.snackbarIsActive)
        .then(result => {
            expect(result).toEqual('¡Datos guardados!');
            done();
        })
        .catch(catchErrors(done));
    });

    it('should confirm the channel have been selected', done => {
        nightmare
        .waitForSnackbarReset()
        .click(selectors.fiscalData.fiscalDataButton)
        .wait(selectors.fiscalData.addressInput)
        .click(selectors.basicData.basicDataButton)
        .wait(selectors.basicData.basicDataButton)
        .getInputValue(selectors.basicData.channelInput)
        .then(result => {
            expect(result).toEqual('Metropolis newspaper');
            done();
        })
        .catch(catchErrors(done));
    });
});