require 'rails/generators'
module AssetSync
  class InstallGenerator < Rails::Generators::Base
    desc "Install a config/asset_sync.yml and the asset:precompile rake task enhancer"

    # Commandline options can be defined here using Thor-like options:
    class_option :use_yml,   :type => :boolean, :default => false, :desc => "Use YML file instead of Rails Initializer"
    class_option :provider,  :type => :string,  :default => "AWS",  :desc => "Generate with support for 'AWS', 'Rackspace', 'Google', 'AzureRM', or 'Backblaze'"

    def self.source_root
      @source_root ||= File.join(File.dirname(__FILE__), 'templates')
    end

    def aws?
      options[:provider] == 'AWS'
    end

    def google?
      options[:provider] == 'Google'
    end

    def rackspace?
      options[:provider] == 'Rackspace'
    end

    def azure_rm?
      options[:provider] == 'AzureRM'
    end

    def backblaze?
      options[:provider] == 'Backblaze'
    end

    def aws_access_key_id
      "<%= ENV['AWS_ACCESS_KEY_ID'] %>"
    end

    def aws_secret_access_key
      "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>"
    end

    def aws_session_token
      "<%= ENV['AWS_SESSION_TOKEN'] %>"
    end

    def google_storage_access_key_id
      "<%= ENV['GOOGLE_STORAGE_ACCESS_KEY_ID'] %>"
    end

    def google_storage_secret_access_key
      "<%= ENV['GOOGLE_STORAGE_SECRET_ACCESS_KEY'] %>"
    end

    def rackspace_username
      "<%= ENV['RACKSPACE_USERNAME'] %>"
    end

    def rackspace_api_key
      "<%= ENV['RACKSPACE_API_KEY'] %>"
    end

    def azure_storage_account_name
      "<%= ENV['AZURE_STORAGE_ACCOUNT_NAME'] %>"
    end

    def azure_storage_access_key
      "<%= ENV['AZURE_STORAGE_ACCESS_KEY'] %>"
    end

    def b2_key_id
      "<%= ENV['B2_KEY_ID'] %>"
    end

    def b2_key_token
      "<%= ENV['B2_KEY_TOKEN'] %>"
    end

    def b2_bucket_id
      "<%= ENV['B2_BUCKET_ID'] %>"
    end

    def app_name
      @app_name ||= Rails.application.is_a?(Rails::Application) && Rails.application.class.name.sub(/::Application$/, "").downcase
    end

    def generate_config
      if options[:use_yml]
        template "asset_sync.yml", "config/asset_sync.yml"
      end
    end

    def generate_initializer
      unless options[:use_yml]
        template "asset_sync.rb", "config/initializers/asset_sync.rb"
      end
    end

  end
end
