# frozen_string_literal: true

# A function to parse an Artifactory maven 2 repository URL
Puppet::Functions.create_function(:'archive::parse_artifactory_url') do
  dispatch :parse_artifactory_url do
    param 'Variant[Stdlib::HTTPUrl, Stdlib::HTTPSUrl]', :url
  end

  def parse_artifactory_url(url)
    # Regex is for the 'maven-2-default Repository Layout'
    matchdata = url.match(%r{
             (?<base_url>.*/artifactory)
             /
             (?<repository>[^/]+)
             /
             (?<org_path>.+?)
             /
             (?<module>[^/]+)
             /
             (?<base_rev>[^/]+?)
             (?:-(?<folder_iteg_rev>SNAPSHOT))?
             /
             \k<module>-\k<base_rev>
             (?:-(?<file_iteg_rev>SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))))?
             (?:-(?<classifier>[^/]+?))?
             \.
             (?<ext>(?:(?!\d))[^\-/]+|7z)
             }x)
    return nil unless matchdata

    matchdata.names.zip(matchdata.captures).to_h
  end
end
