module OA
  class EditLabelCopyReleasePage < OA::BasePage
    page_url "/cont_mgmt/edit_ex_release.php"
    select_list(:label_release_meta_language, name: "meta_language")
    text_field(:label_release_name, name: "release_name_req")
    text_field(:label_release_imprint, name: "label")
    text_field(:label_copyright_line, name: "c_line")
    text_field(:p_line, name: "product_p_line")
    select_list(:label_release_format, id: "format")
    select_list(:label_orchard_artist, name: "prmArtistID")
    text_field(:label_release_date, id: "react-select-3-input")
    text_field(:label_release_sale_start_date, id: "react-select-2-input")
    div(:preorder_type, css: "[data-testid='preorderTypeDropdown']")
    text_field(:label_release_pre_order, css: "[data-testid='preorderType'] input.Select__input")
    text_field(:label_release_fix_date, id: "preorder_date")
    select_list(:label_release_genre, id: "genre_id")
    select_list(:label_release_subgenre, id: "subgenre")
    select_list(:label_release_product_type, name: "product_type_id")
    select_list(:label_release_tv_country, name: "country_of_origin_tv")
    select_list(:label_release_film_country, name: "country_of_origin_film")
    select_list(:label_release_video_country, name: "country_of_origin_video")
    button(:save_label_copy_release, id: "save_release_info")
    button(:submit_scheduling, text: "Submit")
    div(:green_confirmation_message, class: "alertConfirm")
    select_list(:physical_supply_chain, id: "sc_restricted")
    button(:send_to_button) { b_element(visible_text: "<< SEND TO").parent }
    span(:physical_product) { div_element(id: "lblproduct_type").span_element(text: /Physical/) }
    button(:submit_physical_supply_chain, name: "release_physical_carveouts_panel_submit")

    # Populate_fields_on_the_page
    def populate_required_fields(data)
      populate_release_fields(data)
      populate_product_data(data)
      populate_order_data(data)
      populate_genre(data)
      save_label_copy_release
      expect(green_confirmation_message).to include "Release Info. successfully updated."
      populate_date(data)
      save_label_copy_release
    end

    # Verify_fields_on_the_page
    def verify_populated_fields(data)
      verify_release_fields(data)
      verify_product_data(data)
      # verify_date(data)
      verify_order_data(data)
      verify_genre(data)
    end

    private

    def populate_release_fields(data)
      self.label_release_meta_language = data[:meta_language]
      self.label_release_name = data[:release_name]
      self.label_release_imprint = data[:release_imprint]
    end

    def populate_product_data(data)
      self.label_copyright_line = data[:c_line]
      self.p_line = data[:p_line]
      self.label_release_format = data[:format]
      self.label_release_product_type = data[:product_type]
    end

    def populate_date(data)
      label_release_sale_start_date_element.send_keys data[:sale_start_date]
      label_release_sale_start_date_element.send_keys :escape
      label_release_date_element.send_keys data[:release_date]
      label_release_date_element.send_keys :escape
      preorder_type_element.click
      div_element(text: "Specific Date").click
      label_release_pre_order_element.send_keys "2023-05-01"
      label_release_pre_order_element.send_keys :escape
      submit_scheduling
    end

    def populate_order_data(data)
      self.label_orchard_artist = data[:orchard_artist]
    end

    def populate_genre(data)
      self.label_release_genre = data[:genre]
      self.label_release_subgenre = data[:subgenre]
    end

    def verify_release_fields(data)
      expect(label_release_meta_language).to eql data[:meta_language]
      expect(label_release_name).to eql data[:release_name]
      expect(label_release_imprint).to eql data[:release_imprint]
      expect(p_line).to eql data[:p_line]
    end

    def verify_product_data(data)
      expect(label_copyright_line).to eql data[:c_line]
      expect(label_release_name).to eql data[:release_name]
      expect(label_release_format).to eql data[:format]
      expect(label_release_product_type).to eql data[:product_type]
    end

    def verify_date(data)
      expect(label_release_date).to eql data[:release_date]
      expect(label_release_sale_start_date).to eql data[:sale_start_date]
    end

    def verify_order_data(data)
      expect(label_orchard_artist).to eql data[:orchard_artist]
      # expect(label_release_pre_order).to eql data[:pre_order]
    end

    def verify_genre(data)
      expect(label_release_genre).to eql data[:genre]
      expect(label_release_subgenre).to eql data[:subgenre]
    end
  end
end
