//Accounting.js

//Actions specific to the Accounting section

var EC = protractor.ExpectedConditions;
var createLedger = $("a[href='/accounting/create']");
var accountIdentifierInput = $("fims-id-input[controlname='identifier'] input");
var accountNameInput = $("input[formcontrolname='name']");
var accountBalanceInput = $("input[formcontrolname='balance']");
var primaryButton = $$(".mat-raised-button.mat-primary");
var radioButtonAsset = $$("md-radio-button").get(0);
var radioButtonRevenue = $$("md-radio-button").get(4);

//journal entries
var accountSearchInputField = $("input[formcontrolname='account']");

module.exports = {
    goToAccountingViaSidePanel: function() {
        browser.wait(EC.visibilityOf($$("a[href='/accounting']").first()), 3000);
        $$("a[href='/accounting']").first().click();$$("a[href='/accounting']").first().click();
    },
    verifyCardHasTitleGeneralLedger: function() {
        form_title=$("fims-layout-card-over .mat-toolbar-row div").getText();
        expect(form_title).toEqual("General Ledger");
    },
    clickButtonOrLinkCreateNewLedger: function(){
        browser.wait(EC.visibilityOf(createLedger), 5000);
        createLedger.click();
    },
    goToTransactionTypes: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/transactiontypes']")), 3000);
        $("a[href='/accounting/transactiontypes']").click();
    },
    goToChartOfAccounts: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/chartOfAccounts']")), 3000);
        $("a[href='/accounting/chartOfAccounts']").click();
    },
    goToJournalEntries: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/journalEntries']")), 3000);
        $("a[href='/accounting/journalEntries']").click();
    },
    goToChequeClearing: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/cheques']")), 3000);
        $("a[href='/accounting/cheques']").click();
    },
    goToTrialBalance: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/trialBalance']")), 3000);
        $("a[href='/accounting/trialBalance']").click();
    },
    goToPayrolls: function() {
        browser.wait(EC.visibilityOf($("a[href='/accounting/payrolls']")), 3000);
        $("a[href='/accounting/payrolls']").click();
    },
    viewAccountEntriesForAccount: function(accountIdentifier){
        link = "/accounting/accounts/detail/" + accountIdentifier + "/entries";
        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
        $('a[href="'+ link + '"]').click();
        browser.sleep(1000);
    },
    clickLinkShowForAccountWithName: function(name) {
        browser.wait(EC.invisibilityOf($("div[class='md-padding'] h3")), 5000);
        browser.sleep(1000);
        browser.wait(EC.textToBePresentInElement($$("tbody tr .td-data-table-cell").last(), "SHOW"), 5000);
        $$('tbody tr').filter(function(elem, index) {
            return elem.$$(".td-data-table-cell").get(1).getText().then(function(text) {
                return text === name;
            });
        }).$$(".td-data-table-cell").last().click();
    },
    clickLinkShowForAccountWithIdentifier: function(identifier) {
        browser.wait(EC.invisibilityOf($("div[class='md-padding'] h3")), 5000);
        browser.sleep(1000);
        browser.wait(EC.textToBePresentInElement($$("tbody tr .td-data-table-cell").last(), "SHOW"), 5000);
        $$('tbody tr').filter(function(elem, index) {
            return elem.$$(".td-data-table-cell").get(0).getText().then(function(text) {
                return text === identifier;
            });
        }).$$(".td-data-table-cell").last().click();
    },
    verifyAccountStatus: function(expectedStatus){
        browser.wait(EC.visibilityOf($("fims-state-display")), 2000);
        expect($("fims-state-display .mat-list-text .mat-line").getText().then(function(text){
                return text === expectedStatus;
            })).toBe(true);
    },
    verifyAccountInfo: function(heading, value) {
        expect($$(".md-list-item .mat-list-text").filter(function (elem, index) {
            return elem.$("h3").getText().then(function (text) {
                return text === heading;
            }).$(p).getText().then(function (text) {
                return text === value;
            }).toBe(true);
        }));
    },
    verifyTransactionTypeForRow: function(type, row) {
        browser.wait(EC.visibilityOf($("table tbody")), 3000);
        expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(1).getText()).toEqual(type);
    },
    verifyTransactionMessageForRow: function(message, row) {
        browser.wait(EC.visibilityOf($("table tbody")), 3000);
        expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(2).getText()).toEqual(message);
    },
    verifyTransactionAmountForRow: function(amount, row) {
        browser.wait(EC.visibilityOf($("table tbody")), 3000);
        expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(3).getText()).toEqual(amount);
    },
    verifyTransactionBalanceForRow: function(balance, row) {
        browser.wait(EC.visibilityOf($("table tbody")), 3000);
        expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(4).getText()).toEqual(balance);
    },
    clickCreateNewAccountInLedger: function(ledger){
        link = "/accounting/ledgers/detail/" + ledger + "/accounts/create";
        browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
        $('a[href="'+ link + '"]').click();
    },
    enterTextIntoAccountIdentifierInputField: function(text) {
        browser.wait(EC.visibilityOf(accountIdentifierInput), 5000);
        accountIdentifierInput.click().sendKeys(text);
    },
    enterTextIntoAccountNameInputField: function(text) {
        browser.wait(EC.visibilityOf(accountNameInput), 5000);
        accountNameInput.click().sendKeys(text);
    },
    enterTextIntoAccountBalanceInputField: function(text) {
        browser.wait(EC.visibilityOf(accountBalanceInput), 5000);
        accountBalanceInput.click().sendKeys(text);
    },
    clickButtonCreateAccount: function(){
        primaryButton.filter(function(elem, index) {
            return elem.$("span").getText().then(function(text) {
                return text === "CREATE ACCOUNT";
            });
        }).click();
    },
    verifyRadioAssetToBeSelected: function() {
        expect(radioButtonAsset.getAttribute("class")).toMatch("mat-radio-checked");
    },
    verifyRadioAssetToBeDisabled: function() {
        expect(radioButtonAsset.getAttribute("class")).toMatch("mat-radio-disabled");
    },
    verifyRadioRevenueToBeSelected: function() {
        expect(radioButtonRevenue.getAttribute("class")).toMatch("mat-radio-checked");
    },
    enterTextIntoSearchAccountInputField: function(account) {
        browser.wait(EC.visibilityOf(accountSearchInputField), 5000);
        accountSearchInputField.click().sendKeys(account);
    },
    clickSearchButton: function(){
       $$("button").filter(function(elem, index) {
            return elem.$("span md-icon").getText().then(function(text) {
                return text === "search";
            });
        }).click();
    },
    verifyFirstJournalEntry: function(transactionType, transactionAmount){
        browser.sleep(500);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").first().getText().then(function(text){
            return text === transactionType;
        })).toBe(true);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(1).getText().then(function(text){
            return text === transactionAmount;
        })).toBe(true);
    },
    verifySecondJournalEntry: function(transactionType, transactionAmount){
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(2).getText().then(function(text){
            return text === transactionType;
        })).toBe(true);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(3).getText().then(function(text){
            return text === transactionAmount;
        })).toBe(true);
    },
    verifyThirdJournalEntry: function(transactionType, transactionAmount){
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(4).getText().then(function(text){
            return text === transactionType;
        })).toBe(true);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(5).getText().then(function(text){
            return text === transactionAmount;
        })).toBe(true);
    },
    verifyFourthJournalEntry: function(transactionType, transactionAmount){
        browser.sleep(500);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(6).getText().then(function(text){
            return text === transactionType;
        })).toBe(true);
        expect($$("fims-layout-card-over .mat-list-item .mat-list-text p").get(7).getText().then(function(text){
            return text === transactionAmount;
        })).toBe(true);
    }
};