# frozen_string_literal: true

module ThemeStore
  class BaseImporter
    def import!
      raise "Not implemented"
    end

    def [](value)
      fullpath = real_path(value)
      return nil unless fullpath
      File.read(fullpath)
    end

    def real_path(relative)
      fullpath = "#{temp_folder}/#{relative}"
      return nil unless File.exist?(fullpath)

      # careful to handle symlinks here, don't want to expose random data
      fullpath = Pathname.new(fullpath).realpath.to_s

      if fullpath && fullpath.start_with?(temp_folder)
        fullpath
      else
        nil
      end
    end

    def file_size(path)
      fullpath = real_path(path)
      return -1 unless fullpath
      File.size(fullpath)
    end

    def all_files
      Dir.glob("**/**", base: temp_folder).reject { |f| File.directory?(File.join(temp_folder, f)) }
    end

    def cleanup!
      FileUtils.rm_rf(temp_folder)
    end

    def temp_folder
      @temp_folder ||= "#{Pathname.new(Dir.tmpdir).realpath}/discourse_theme_#{SecureRandom.hex}"
    end
  end
end