require 'cgi'

module Jekyll
  module PermalinkBuilder
    extend self

    def get_adjusted_permalink(resource, layout)
      layout_path = CGI.escape(layout)
      url = resource.url
      ext = File.extname(url)

# Original Code
#      if url.include?(':layout')
#        return url.gsub(/:layout/, layout_path)
#      end
#
#      if ext.empty?
#        "#{url}/#{layout_path}/"
#      else
#          url.gsub(/\/$|#{ext}$/) { |url_end| "/#{layout_path}#{url_end}" }   

# Below is the code I wrote to hard-code the path for the AMP articles.  Change the next line if you need to change the folder processed.
#        if layout.include?('landing-pages-industries_amp_v2')
#       url = "amp/#{url}"
#      end
#        if layout.include?('landing-pages-resources_amp_v2')
#        url = "amp/#{url}"
#      end
#        if layout.include?('landing-pages-paid_media_amp_v2')
#        url = "amp/#{url}"
#     end
#        if layout.include?('store_app_detail_amp_v2')
#        url = "amp/#{url}"
#      end
#        if layout.include?('store_integration_detail_amp_v2')
#        url = "amp/#{url}"
#      end
#        if layout.include?('article_amp_v2')
#        url = "amp/#{url}"
#      end

    if layout.include?('amp')
      url = "amp/#{url}"
    end
        
    end
  end

  class PageLayoutsGenerator
    def generate(site)
      pages = site.pages.map! do |page|
        if page.data["layout"].is_a?(Array)
          create_layout_views(page)
        else
          page
        end
      end

      pages.flatten!
    end

    private

    def create_layout_views(page)
      page.data["layout"].map do |layout|
        dir = File.dirname(page.relative_path)
        Page.new(page.site, page.site.source, dir, page.name).tap do |new_page|
          new_page.data["layout"] = layout
          new_page.data["permalink"] = PermalinkBuilder.get_adjusted_permalink(page, layout)
        end
      end
    end
  end

  class CollectionLayoutsGenerator
    def generate(site)
      site.collections.each do |_, collection|
        docs = collection.docs.map! do |doc|
          if doc.data["layout"].is_a?(Array)
            create_layout_views(site, collection, doc)
          else
            doc
          end
        end

        docs.flatten!
      end
    end

    private

    def create_layout_views(site, collection, doc)
      doc.data["layout"].map do |layout|
        Document.new(doc.path, :site => site, :collection => collection).tap do |new_doc|
          new_doc.read
          new_doc.data["layout"] = layout
          new_doc.data["permalink"] = PermalinkBuilder.get_adjusted_permalink(doc, layout)
        end
      end
    end
  end

  class MultiPostGenerator < Generator
    safe true

    def generate(site)
      PageLayoutsGenerator.new.generate(site)
      CollectionLayoutsGenerator.new.generate(site)
    end
  end
end