module Support
  module Services
    class OwsTrack
      include HTTParty

      base_uri DOMAINS[:ows_track]

      class << self
        def delete_lyrics(track_id, session_id)
          path = "/track/#{track_id}"
          headers = {
            "session" => session_id
          }

          response = put(path, body: { "lyrics" => "" }.to_json, headers: headers)

          JSON.parse(response.body)
        end

        def create_new_track(product_id, session_id)
          path = "/product/#{product_id}/tracks"
          headers = {
            "session" => session_id,
            "Content-Type" => "application/json"
          }
          track_data = JSON.parse(File.read("features/json/track_data.json"))["track_data"]
          response = put(path, body: track_data.to_json, headers: headers)
          if response.code != 200
            fail("Error creating track via ows-track, error code #{response.code}")
          end
          response_body = JSON.parse(response.body)
          add_generated_isrc(response_body["items"][0]["tuid"], session_id, track_data["tracks"][0])
          response_body
        end

        def add_generated_isrc(track_id, session_id, track_data)
          path = "/track/#{track_id}"
          headers = {
            "session" => session_id,
            "Content-Type" => "application/json"
          }
          response = put(path, body: track_data.to_json, headers: headers, query: { generate_isrc: 1 })
          return if response.code == 200
          fail("Error updating track via ows-track, error code #{response.code}")
        end

        def add_performers(track_id, session_id)
          path = "/track/#{track_id}/performers"
          headers = {
            "session" => session_id,
            "Content-Type" => "application/json"
          }
          performer_data = JSON.parse(File.read("features/json/track_data.json"))["track_performer_data"]
          response = put(path, body: performer_data.to_json, headers: headers)
          return if response.code == 200
          fail("Error updating track performers via ows-track, error code #{response.code}")
        end
      end

      def self. add_publishing_obligation(track_id, product_id, session_id)
        path = "/product/#{product_id}/tracks/publishing-obligation"
        headers = {
          "session" => session_id,
          "Content-Type" => "application/json"
        }
        publishing_data = JSON.parse(File.read("features/json/track_data.json"))["track_publishing_data"]
        publishing_data[0]["tuid"] = track_id
        response = put(path, body: publishing_data.to_json, headers: headers)
        return if response.code == 200
        fail("Error updating track publishing obligation via ows-track, error code #{response.code}")
      end
    end
  end
end
