# encoding: utf-8
module ThemesForRails
  class Config

    attr_writer :base_dir, :themes_dir, :assets_dir, :views_dir, :themes_routes_dir
    attr_accessor :use_sass, :default_theme
    
    include Interpolation

    def initialize(&block)
      @use_sass = true
      @default_theme = 'default'
      yield if block_given?
    end
    
    def base_dir
      @base_dir ||= Rails.root.to_s
    end
    
    # relative assets dir for view overloading support
    # used for theme_view_path_for method to get theme path and add to view paths.
    # Defaults to themes_dir for non asset pipeline users
    #
    # If you are using the Rails Asset Pipeline, this should be changed to the 
    # path of your assets in your app. For example, if you store your themes
    # under /app/assets/themes - {Rails.root}/app/assets/themes
    # you would need to set this to 'app/assets/themes' in your initializer config
    def assets_dir
      @assets_dir ||= ":root/themes/:name"
    end
    
    # relative views directory for theme views to be separated from assets
    # used for Asset Pipeline support. Defaults to match {assets_dir}/views
    def views_dir
      @views_dir ||= ":root/themes/:name/views"
    end
    
    def themes_dir
      @themes_dir ||= ":root/themes"
    end
    
    # Full path to themes
    def themes_path
      interpolate(themes_dir)
    end

    # This is the base themes dir that is used for mapping URL paths.
    # 
    # If you are using the Rails Asset Pipeline, this should be changed to the
    # prefix dir of your assets path. For example, if you store your themes
    # under /app/assets/themes - {Rails.root}/app/assets/themes
    # you would need to set this value to 'assets' to match up with the Sprockets
    # path resolution process.

    def themes_routes_dir
      @themes_routes_dir ||= "themes"  
    end

    def clear
      @base_dir   = nil
      @themes_dir = nil
      @assets_dir = nil
      @views_dir  = nil
    end

    def use_sass?
      @use_sass and sass_is_available?
    end

    def sass_is_available?
      !!defined?Sass::Plugin
    end
  end  
end