module DataHelpers
  class DigitalProductMetadata
    attr_reader :data

    def initialize(user_name:)
      @user_name = user_name
      @stamp = Time.stamp.slice(0..11)
      @date = Date.today
      @data = base_landing_page_data
    end

    def view_release_page_fields
      view_release_page_data.keys
    end

    def view_release_page_data
      @data.select { |field, _v| all_view_release_page_fields.include? field }
    end

    def fields
      @data.keys
    end

    def add_optional_landing_page_fields
      @data.merge!(
        product_code: @stamp,
        product_version: "Watir Version #{@stamp}",
        version_notes: "Deluxe Edition"
      )
    end

    def add_required_basics_fields
      required_basics_data = base_required_basics_data.merge(label_specific_basics_data)
      @data.merge!(required_basics_data)
    end

    def add_optional_basics_fields
      featuring_artist_name = "Watir_Featuring_Artist_#{@stamp}"
      remixer_artist_name = "Watir Remixer Artist #{@stamp}"
      @data.merge!(
        product_code: @stamp,
        version: "Watir Version #{@stamp}",
        featuring_artists: ["#{featuring_artist_name} 1", "#{featuring_artist_name} 2"],
        remixer_artists: ["#{remixer_artist_name} 1", "#{remixer_artist_name} 2"],
        itunes_pricing: "Budget 2",
        amazon_pricing: "Deluxe 1",
        preorder: "Immediate",
        special_instructions: "Watir Special Instructions #{@stamp}"
      )
    end

    def add_new_basics_dropdown_options
      @data.merge!(
        imprint: "Watir Imprint #{@stamp}"
      )
    end

    def add_classical_basics_fields
      composer_name = "Watir Composer Artist #{@stamp}"
      orchestra_name = "Watir Orchestra Artist #{@stamp}"
      ensemble_name = "Watir Ensemble Artist #{@stamp}"
      conductor_name = "Watir Conductor Artist #{@stamp}"
      @data.merge!(
        genre: "Classical",
        subgenre: "Baroque",
        composers: ["#{composer_name} 1", "#{composer_name} 2"],
        orchestras: ["#{orchestra_name} 1", "#{orchestra_name} 2"],
        ensembles: ["#{ensemble_name} 1", "#{ensemble_name} 2"],
        conductors: ["#{conductor_name} 1", "#{conductor_name} 2"]
      )
    end

    private

    def base_landing_page_data
      {
        product_name: "Watir Digital Product #{@stamp}",
        format: "Full Length"
      }
    end

    def base_required_basics_data
      release_date = (@date + 1).to_s
      sales_date = (@date + 2).to_s
      artist_name = "Watir Primary Artist #{@stamp}"
      {
        meta_language: "English",
        primary_artists: ["#{artist_name} 1", "#{artist_name} 2"],
        genre: "Country",
        subgenre: "Outlaw",
        c_line: "2009 Watir",
        release_date: release_date,
        sales_date: sales_date
      }
    end

    def label_specific_basics_data
      case @user_name
      when :label_7123
        {
          imprint: "Funky Town Grooves"
        }
      when :subaccount_1
        {
          imprint: "2011 Orchard Demo Account"
        }
      else
        fail "no user data found for #{@user_name}!"
      end
    end

    def all_view_release_page_fields
      %i[product_name meta_language release_date itunes_pricing
         amazon_pricing format imprint genre subgenre
         c_line product_code version]
    end
  end
end
