class Backup
  include UrlHelper
  include ActiveModel::SerializerSupport

  attr_reader :filename, :size, :path, :link

  def initialize(filename)
    @filename = filename
    @path = File.join(Backup.base_directory, filename)
    @link = schemaless "#{Discourse.base_url}/admin/backups/#{filename}"
    @size = File.size(@path)
  end

  def self.all
    backups = Dir.glob(File.join(Backup.base_directory, "*.tar.gz"))
    backups.sort.reverse.map { |backup| Backup.new(File.basename(backup)) }
  end

  def self.[](filename)
    path = File.join(Backup.base_directory, filename)
    if File.exists?(path)
      Backup.new(filename)
    else
      nil
    end
  end

  def self.remove(filename)
    path = File.join(Backup.base_directory, filename)
    File.delete(path) if File.exists?(path)
  end

  def self.base_directory
    @base_directory ||= File.join(Rails.root, "public", "backups", RailsMultisite::ConnectionManagement.current_db)
  end

  def self.chunk_path(identifier, filename, chunk_number)
    File.join(Backup.base_directory, "tmp", identifier, "#{filename}.part#{chunk_number}")
  end

end
