# Create
#
# Generates an Android project from a valid WWW directory and puts it in ../[PROJECT NAME]_android
#
class Create < Classic
  def initialize(path)
    guess_paths(path)
    read_config
    build
  end

  def guess_paths(path)
    # if no path is supplied uses current directory for project
    path = FileUtils.pwd if path.nil?

    # if a www is found use it for the project
    path = File.join(path, 'www') if File.exists? File.join(path, 'www')

    # defaults
    @name             = path.split("/").last.gsub('-','').gsub(' ','') # no dashses nor spaces
    @path             = File.join(path, '..', "#{ @name }_android")
    @www              = path
    @pkg              = "com.phonegap.#{ @name }"
    @android_sdk_path = Dir.getwd[0,1] != "/" ? `android-sdk-path.bat android.bat`.gsub('\\tools','').gsub('\\', '\\\\\\\\') : `which android`.gsub(/\/tools\/android$/,'').chomp
    @android_dir      = File.expand_path(File.dirname(__FILE__).gsub('lib',''))
    @framework_dir    = File.join(@android_dir, "framework")
    @icon             = File.join(@www, 'icon.png')
    @app_js_dir       = ''
    @content          = 'index.html'

    # stop executation on errors
    raise "Expected index.html in the following folder #{ path }.\nThe path is expected to be the directory droidgap create is run from or specified as a command line arg like droidgap create my_path." unless File.exists? File.join(path, 'index.html')
    raise 'Could not find android in your PATH!' if @android_sdk_path.empty?
  end

  # reads in a config.xml file
  def read_config
    config_file = File.join(@www, 'config.xml')

    if File.exists?(config_file)
      require 'rexml/document'
      f                 = File.new config_file
      doc               = REXML::Document.new(f)
      @config           = {}
      @config[:id]      = doc.root.attributes["id"]
      @config[:version] = doc.root.attributes["version"]
      @config[:icons]   = {}
      defaultIconSize   = 0
      doc.root.elements.each do |n|
        @config[:name]             = n.text.gsub('-','').gsub(' ','') if n.name == 'name'
        @config[:description]      = n.text if n.name == 'description'
        @config[:content]          = n.attributes["src"] if n.name == 'content'
        if n.name == 'icon'
          if n.attributes["width"] == '72' && n.attributes["height"] == '72'
            @config[:icons]["drawable-hdpi".to_sym] = n.attributes["src"]
            if 72 > defaultIconSize
              @config[:icon] = n.attributes["src"]
              defaultIconSize = 72
            end
          elsif n.attributes["width"] == '48' && n.attributes["height"] == '48'
            @config[:icons]["drawable-mdpi".to_sym] = n.attributes["src"]
            if 48 > defaultIconSize
              @config[:icon] = n.attributes["src"]
              defaultIconSize = 48
            end
          elsif n.attributes["width"] == '36' && n.attributes["height"] == '36'
            @config[:icons]["drawable-ldpi".to_sym] = n.attributes["src"]
            if 36 > defaultIconSize
              @config[:icon] = n.attributes["src"]
              defaultIconSize = 36
            end
          else
            @config[:icon] = n.attributes["src"]
          end
        end


        if n.name == "preference" && n.attributes["name"] == 'javascript_folder'
          @config[:js_dir] = n.attributes["value"]
        end
      end

      # extract android specific stuff
      @config[:versionCode] = doc.elements["//android:versionCode"] ? doc.elements["//android:versionCode"].text : 3
      @config[:minSdkVersion] = doc.elements["//android:minSdkVersion"] ? doc.elements["//android:minSdkVersion"].text : 1
      # will change the name from the directory to the name element text
      @name = @config[:name] if @config[:name]
      # set the icon from the config
      @icon = File.join(@www, @config[:icon]) if @config[:icon]
      @icons = @config[:icons] if @config[:icons].length > 0
      # sets the app js dir where phonegap.js gets copied
      @app_js_dir = @config[:js_dir] ? @config[:js_dir] : ''
      # sets the start page
      @content = @config[:content] ? @config[:content] : 'index.html'
    end
  end
end