module DataHelpers
  class DigitalProductBasics
    attr_reader :data

    def initialize(user_name:)
      @user_name = user_name
      @stamp = Time.stamp.slice(0..11)
      @data = base_landing_page_data
    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,
        product_version: "Watir Version #{@stamp}",
        version_notes: "Deluxe Edition",
        featuring_artists: ["#{featuring_artist_name} 1", "#{featuring_artist_name} 2"],
        remixer_artists: ["#{remixer_artist_name} 1", "#{remixer_artist_name} 2"],
        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
      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"
      }
    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
  end
end
