# frozen_string_literal: true

module Jekyll
  module Drops
    class UrlDrop < Drop
      extend Forwardable

      mutable false

      def_delegator :@obj, :cleaned_relative_path, :path
      def_delegator :@obj, :output_ext, :output_ext

      def collection
        @obj.collection.label
      end

      def name
        Utils.slugify(@obj.basename_without_ext)
      end

      def title
        Utils.slugify(@obj.data["slug"], :mode => "pretty", :cased => true) ||
          Utils.slugify(@obj.basename_without_ext, :mode => "pretty", :cased => true)
      end

      def slug
        Utils.slugify(@obj.data["slug"]) || Utils.slugify(@obj.basename_without_ext)
      end

      def categories
        category_set = Set.new
        Array(@obj.data["categories"]).each do |category|
          category_set << category.to_s.downcase
        end
        category_set.to_a.join("/")
      end

      def year
        @obj.date.strftime("%Y")
      end

      def month
        @obj.date.strftime("%m")
      end

      def day
        @obj.date.strftime("%d")
      end

      def hour
        @obj.date.strftime("%H")
      end

      def minute
        @obj.date.strftime("%M")
      end

      def second
        @obj.date.strftime("%S")
      end

      def i_day
        @obj.date.strftime("%-d")
      end

      def i_month
        @obj.date.strftime("%-m")
      end

      def short_month
        @obj.date.strftime("%b")
      end

      def short_year
        @obj.date.strftime("%y")
      end

      def y_day
        @obj.date.strftime("%j")
      end

      private
      def fallback_data
        {}
      end
    end
  end
end
