namespace :load do

task :defaults do

  set :mb_recipes, %w(
    aptitude
    bundler
    crontab
    dotenv
    logrotate
    migrate
    nginx
    postgresql
    rbenv
    seed
    ssl
    ufw
    unicorn
    user
    version
  )

  set :mb_privileged_user, "root"

  set :mb_aptitude_packages,
      "build-essential"        => :all,
      "curl"                   => :all,
      "debian-goodies"         => :all,
      "git-core"               => :all,
      "libpq-dev"              => :all,
      "libreadline-gplv2-dev"  => :all,
      "libssl-dev"             => :all,
      "libxml2"                => :all,
      "libxml2-dev"            => :all,
      "libxslt1-dev"           => :all,
      "nginx@ppa:nginx/stable" => :web,
      "nodejs"                 => :all,
      "ntp"                    => :all,
      "postgresql"             => :db,
      "postgresql-client"      => :all,
      "tklib"                  => :all,
      "ufw"                    => :all,
      "zlib1g-dev"             => :all

  set :mb_bundler_lockfile, "Gemfile.lock"
  set :mb_bundler_gem_install_command,
      "gem install bundler --conservative --no-document"

  set :mb_dotenv_keys, %w(rails_secret_key_base postmark_api_key)
  set :mb_dotenv_filename, -> { ".env.#{fetch(:rails_env)}" }

  set :mb_log_file, "log/capistrano.log"

  set :mb_nginx_force_https, false
  set :mb_nginx_redirect_hosts, {}

  ask :mb_postgresql_password, nil, :echo => false
  set :mb_postgresql_pool_size, 5
  set :mb_postgresql_host, "localhost"
  set :mb_postgresql_database,
      -> { "#{application_basename}_#{fetch(:rails_env)}" }
  set :mb_postgresql_user, -> { application_basename }
  set :mb_postgresql_pgpass_path,
      proc{ "#{shared_path}/config/pgpass" }
  set :mb_postgresql_backup_path, -> {
    "#{shared_path}/backups/postgresql-dump.dmp"
  }
  set :mb_postgresql_backup_exclude_tables, []
  set :mb_postgresql_dump_options, -> {
    options = fetch(:mb_postgresql_backup_exclude_tables).map do |t|
      "-T #{t.shellescape}"
    end
    options.join(" ")
  }

  set :mb_rbenv_ruby_version, -> { IO.read(".ruby-version").strip }
  set :mb_rbenv_vars, -> {
    {
      "RAILS_ENV" => fetch(:rails_env),
      "PGPASSFILE" => fetch(:mb_postgresql_pgpass_path)
    }
  }

  set :mb_sidekiq_concurrency, 25
  set :mb_sidekiq_role, :sidekiq

  ask :mb_ssl_csr_country, "US"
  ask :mb_ssl_csr_state, "California"
  ask :mb_ssl_csr_city, "San Francisco"
  ask :mb_ssl_csr_org, "Example Company"
  ask :mb_ssl_csr_name, "www.example.com"

  # WARNING: misconfiguring firewall rules could lock you out of the server!
  set :mb_ufw_rules,
      "allow ssh" => :all,
      "allow http" => :web,
      "allow https" => :web

  set :mb_unicorn_workers, 2
  set :mb_unicorn_timeout, 30
  set :mb_unicorn_config, proc{ "#{current_path}/config/unicorn.rb" }
  set :mb_unicorn_log, proc{ "#{current_path}/log/unicorn.log" }
  set :mb_unicorn_pid, proc{ "#{current_path}/tmp/pids/unicorn.pid" }

  set :bundle_binstubs, false
  set :bundle_flags, "--deployment --retry=3 --quiet"
  set :bundle_path, -> { shared_path.join("bundle") }
  set :deploy_to, -> { "/home/deployer/apps/#{fetch(:application)}" }
  set :keep_releases, 10
  set :linked_dirs, -> {
      ["public/#{fetch(:assets_prefix, 'assets')}"] +
      %w(
        .bundle
        log
        tmp/pids
        tmp/cache
        tmp/sockets
        public/.well-known
        public/system
      )
  }
  set :linked_files, -> {
      [fetch(:mb_dotenv_filename)] +
      %w(
        config/database.yml
        config/unicorn.rb
      )
  }
  set :log_level, :debug
  set :migration_role, :app
  set :rails_env, -> { fetch(:stage) }
  set :ssh_options, :compression => true, :keepalive => true

  SSHKit.config.command_map[:rake] = "bundle exec rake"
end

end