package org.openbravo.test.mobile.retail.pack.selenium.tests.prepaymentsAndInvoiceTerms;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;
import org.openbravo.test.mobile.retail.extmodules.selenium.TestIdExtModules;
import org.openbravo.test.mobile.retail.mobilecore.javascript.BackboneHelper;
import org.openbravo.test.mobile.retail.mobilecore.javascript.SynchronizationMonitor;
import org.openbravo.test.mobile.retail.mobilecore.selenium.TestIdConstructor;
import org.openbravo.test.mobile.retail.pack.database.WebPOSDatabaseHelper;
import org.openbravo.test.mobile.retail.pack.selenium.TestIdPack;
import org.openbravo.test.mobile.retail.pack.selenium.terminals.WebPOSInvoicePrepaymentServiceTerminalHelper;

public class OMNI040_PayOpenTicketsAfterOrderDelivery extends
    WebPOSInvoicePrepaymentServiceTerminalHelper {

  private String docNo1;
  private String docNo2;
  private String OMNI = "OMNI1";

  public OMNI040_PayOpenTicketsAfterOrderDelivery() {
    super();
  }

  @Test
  public void test() {
    selectReceiptCustomer("Stephane Cluster");

    tap(TestIdPack.BUTTON_MENU);
    tap(TestIdPack.BUTTON_MENU_INVOICETHISRECEIPT);
    isVisible(TestIdPack.LABEL_CHECK_INVOICE, true);

    docNo1 = BackboneHelper.getDocumentNo();

    addProductWithService(TestIdPack.BUTTON_SEARCHPRODUCT_BLUETROUSERS.getRowName());
    addProduct(TestIdPack.BUTTON_SEARCHPRODUCT_AVALANCHETRANSCEIVER.getRowName());
    addCustomizeBlueTrousersService(TestIdPack.BUTTON_RECEIPT_ROW1);
    tap(TestIdPack.BUTTON_RECEIPT_ROW2);
    tap(TestIdPack.BUTTON_CAN_DELIVER);
    approve();

    SynchronizationMonitor.waitUntilDataIsInTheServer(true);

    tap(TestIdPack.BUTTON_NEWRECEIPT);

    selectReceiptCustomer("Stephane Cluster");

    tap(TestIdPack.BUTTON_MENU);
    tap(TestIdPack.BUTTON_MENU_INVOICETHISRECEIPT);
    isVisible(TestIdPack.LABEL_CHECK_INVOICE, true);

    docNo2 = BackboneHelper.getDocumentNo();

    addProductWithService(TestIdPack.BUTTON_SEARCHPRODUCT_BLUETROUSERS.getRowName());
    addProduct(TestIdPack.BUTTON_SEARCHPRODUCT_AVALANCHETRANSCEIVER.getRowName());
    addCustomizeBlueTrousersService(TestIdPack.BUTTON_RECEIPT_ROW1);
    tap(TestIdPack.BUTTON_RECEIPT_ROW2);
    tap(TestIdPack.BUTTON_CAN_DELIVER);
    approve();

    tap(TestIdPack.BUTTON_MENU);
    tap(TestIdPack.BUTTON_MENU_PAYOPENTICKETS);
    write(TestIdPack.FIELD_SEARCH_MULTIORDERS_TEXT, OMNI);
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_SEARCH);
    TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW1.enyoNode().waitUntilIsReady();
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW1);
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW2);
    tap(TestIdExtModules.BUTTON_POPUP_OPENTICKETS_DONE);

    add209PartialPayment();
    Map<Integer, String[]> map = new HashMap<>();
    map.put(1,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_BLUETROUSERS.getRowName(), 1, 0, 1, 1));
    map.put(
        2,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_AVALANCHETRANSCEIVER.getRowName(), 0, 0,
            0, 1));
    map.put(
        3,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_ADAPTBLUETROUSERS.getRowName(), 1, 0, 1, 1));
    WebPOSDatabaseHelper.checkInvoicesAndDeliveries(docNo1, map);
    WebPOSDatabaseHelper.checkInvoicesAndDeliveries(docNo2, map);

    openReceipt(docNo1);

    tap(TestIdPack.BUTTON_RECEIPT_ROW2);
    tap(TestIdPack.BUTTON_CAN_DELIVER);
    approve();

    openReceipt(docNo2);

    tap(TestIdPack.BUTTON_MENU);
    tap(TestIdPack.BUTTON_MENU_PAYOPENTICKETS);
    write(TestIdPack.FIELD_SEARCH_MULTIORDERS_TEXT, OMNI);
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_SEARCH);
    TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW1.enyoNode().waitUntilIsReady();
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW1);
    tap(TestIdPack.BUTTON_POPUP_OPENTICKETS_ROW2);
    tap(TestIdExtModules.BUTTON_POPUP_OPENTICKETS_DONE);
    add150PartialPayment();

    map = new HashMap<>();
    map.put(1,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_BLUETROUSERS.getRowName(), 1, 0, 1, 1));
    map.put(2, InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_AVALANCHETRANSCEIVER.getRowName()));
    map.put(3, InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_ADAPTBLUETROUSERS.getRowName()));
    WebPOSDatabaseHelper.checkInvoicesAndDeliveries(docNo1, map);
    map = new HashMap<>();
    map.put(1,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_BLUETROUSERS.getRowName(), 1, 0, 1, 1));
    map.put(
        2,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_AVALANCHETRANSCEIVER.getRowName(), 0, 0,
            0, 1));
    map.put(
        3,
        InvoiceQueryLine(TestIdPack.BUTTON_SEARCHPRODUCT_ADAPTBLUETROUSERS.getRowName(), 1, 0, 1, 1));
    WebPOSDatabaseHelper.checkInvoicesAndDeliveries(docNo2, map);

  }

  private void addCustomizeBlueTrousersService(TestIdConstructor t) {
    tap(t);
    tap(TestIdPack.BUTTON_EDIT_SERVICES);
    tap(TestIdPack.BUTTON_SEARCHPRODUCT_ADAPTBLUETROUSERS);
  }

  private void add209PartialPayment() {
    tap(TestIdPack.BUTTON_KEYPAD_2);
    tap(TestIdPack.BUTTON_KEYPAD_0);
    tap(TestIdPack.BUTTON_KEYPAD_9);
    tap(TestIdPack.BUTTON_KEYPAD_DOT);
    tap(TestIdPack.BUTTON_KEYPAD_5);
    tap(TestIdPack.BUTTON_KEYPAD_0);
    tap(TestIdPack.BUTTON_PAY_DONE);
    approve();
  }

  private void add150PartialPayment() {
    tap(TestIdPack.BUTTON_KEYPAD_1);
    tap(TestIdPack.BUTTON_KEYPAD_5);
    tap(TestIdPack.BUTTON_KEYPAD_0);
    tap(TestIdPack.BUTTON_KEYPAD_DOT);
    tap(TestIdPack.BUTTON_KEYPAD_5);
    tap(TestIdPack.BUTTON_KEYPAD_0);
    tap(TestIdPack.BUTTON_PAY_DONE);
    approve();
  }
}