module CollectionResourcesHelper
  include CollectionTimeHelper
  include GovukLinkHelper
  include GovukVisuallyHiddenHelper

  HUMAN_READABLE_CONTENT_TYPE = { "application/pdf": "PDF",
                                  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "Microsoft Excel",
                                  "application/vnd.ms-excel": "Microsoft Excel (Old Format)",
                                  "application/msword": "Microsoft Word",
                                  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "Microsoft Word (DOCX)",
                                  "image/jpeg": "JPEG Image",
                                  "image/png": "PNG Image",
                                  "text/plain": "Text Document",
                                  "text/html": "HTML Document" }.freeze

  def file_type_size_and_pages(file, number_of_pages: nil)
    file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil
    metadata = CollectionResourcesService.new.get_file_metadata(file)

    return [file_pages].compact.join(", ") unless metadata

    file_size = number_to_human_size(metadata["content_length"].to_i)
    file_type = HUMAN_READABLE_CONTENT_TYPE[metadata["content_type"].to_sym] || "Unknown File Type"
    [file_type, file_size, file_pages].compact.join(", ")
  end

  def displayed_collection_resource_years
    return [previous_collection_start_year, current_collection_start_year] if FormHandler.instance.in_edit_crossover_period?
    return [current_collection_start_year, next_collection_start_year] if CollectionResource.where(year: next_collection_start_year, mandatory: true, released_to_user: true).any?

    [current_collection_start_year]
  end

  def editable_collection_resource_years
    return [previous_collection_start_year, current_collection_start_year] if FormHandler.instance.in_edit_crossover_period?
    return [next_collection_start_year, current_collection_start_year] if (Time.zone.today >= Time.zone.local(Time.zone.today.year, 1, 1) && Time.zone.today < Time.zone.local(Time.zone.today.year, 4, 1)) || FeatureToggle.allow_future_resource_updates?

    [current_collection_start_year]
  end

  def year_range_format(year)
    "#{year % 100}/#{(year + 1) % 100}"
  end

  def text_year_range_format(year)
    "#{year} to #{year + 1}"
  end

  def document_list_component_items(resources)
    resources.map do |resource|
      {
        name: "Download the #{resource.display_name.downcase}",
        href: resource.download_path,
        metadata: file_type_size_and_pages(resource.download_filename),
      }
    end
  end

  def document_list_edit_component_items(resources)
    resources.map do |resource|
      {
        name: resource.download_filename,
        href: resource.download_path,
        metadata: file_type_size_and_pages(resource.download_filename),
      }
    end
  end

  def file_exists_on_s3?(file)
    CollectionResourcesService.new.file_exists_on_s3?(file)
  end

  def display_next_year_banner?
    return false if CollectionResource.where(year: next_collection_start_year, mandatory: true, released_to_user: true).any?

    editable_collection_resource_years.include?(next_collection_start_year)
  end

  def next_year_banner_text(lettings_resources, sales_resources)
    if lettings_resources[next_collection_start_year].map(&:download_filename).all? { |file| file_exists_on_s3?(file) } && sales_resources[next_collection_start_year].map(&:download_filename).all? { |file| file_exists_on_s3?(file) }
      govuk_link_to "Release the #{text_year_range_format(next_collection_start_year)} collection resources to users", release_mandatory_collection_resources_path(year: next_collection_start_year), class: "govuk-link"
    else
      "Once you have uploaded all the required #{text_year_range_format(next_collection_start_year)} collection resources, you will be able to release them to users."
    end
  end
end