import { COLLECTION_SELECTORS } from "../../../elements/catalog/collection-selectors";
import { AVAILABLE_CHANNELS_FORM } from "../../../elements/channels/available-channels-form";
import { SELECT_CHANNELS_TO_ASSIGN } from "../../../elements/channels/select-channels-to-assign";
import { ASSIGN_ELEMENTS_SELECTORS } from "../../../elements/shared/assign-elements-selectors";
import { BUTTON_SELECTORS } from "../../../elements/shared/button-selectors";

export function createCollection(collectionName, isPublished, channel) {
  const publishedSelector = isPublished
    ? AVAILABLE_CHANNELS_FORM.radioButtonsValueTrue
    : AVAILABLE_CHANNELS_FORM.radioButtonsValueFalse;

  cy.get(COLLECTION_SELECTORS.createCollectionButton)
    .click()
    .get(COLLECTION_SELECTORS.nameInput)
    .type(collectionName)
    .get(AVAILABLE_CHANNELS_FORM.manageChannelsButton)
    .click()
    .get(SELECT_CHANNELS_TO_ASSIGN.allChannelsCheckbox)
    .click();
  cy.contains(SELECT_CHANNELS_TO_ASSIGN.channelRow, channel.name)
    .find(SELECT_CHANNELS_TO_ASSIGN.channelCheckbox)
    .click()
    .get(BUTTON_SELECTORS.submit)
    .click()
    .get(AVAILABLE_CHANNELS_FORM.availableChannel)
    .click()
    .get(`${AVAILABLE_CHANNELS_FORM.publishedRadioButtons}${publishedSelector}`)
    .click();
  return saveCollection().its("response.body.data.collectionCreate.collection");
}
export function saveCollection(alias = "CreateCollection") {
  return cy
    .addAliasToGraphRequest(alias)
    .get(COLLECTION_SELECTORS.saveButton)
    .click()
    .confirmationMessageShouldDisappear()
    .waitForRequestAndCheckIfNoErrors(`@${alias}`);
}

export function updateCollection({ name, description }) {
  cy.get(COLLECTION_SELECTORS.nameInput)
    .should("be.enabled")
    .get(COLLECTION_SELECTORS.descriptionInput)
    .find(COLLECTION_SELECTORS.placeholder)
    .type(description)
    .get(COLLECTION_SELECTORS.nameInput)
    .clearAndType(name);
  return saveCollection("CollectionUpdate");
}

export function assignProductsToCollection(productName) {
  cy.waitForProgressBarToNotBeVisible()
    .get(COLLECTION_SELECTORS.addProductButton)
    .click()
    .addAliasToGraphRequest("SearchProducts")
    .get(ASSIGN_ELEMENTS_SELECTORS.searchInput)
    .type(productName)
    .waitForRequestAndCheckIfNoErrors("@SearchProducts");
  cy.contains(ASSIGN_ELEMENTS_SELECTORS.tableRow, productName)
    .find(ASSIGN_ELEMENTS_SELECTORS.checkbox)
    .click();
  cy.addAliasToGraphRequest("CollectionAssignProduct");
  cy.get(ASSIGN_ELEMENTS_SELECTORS.submitButton).click();
  cy.waitForRequestAndCheckIfNoErrors("@CollectionAssignProduct");
}

export function removeProductsFromCollection(productName) {
  cy.contains(ASSIGN_ELEMENTS_SELECTORS.tableRow, productName)
    .find(ASSIGN_ELEMENTS_SELECTORS.checkbox)
    .click()
    .addAliasToGraphRequest("UnassignCollectionProduct")
    .get(BUTTON_SELECTORS.deleteIcon)
    .click()
    .waitForRequestAndCheckIfNoErrors("@UnassignCollectionProduct");
}
