class Admin::ModuleStoreController < OrbitAdminController
  layout "structure"
  include Admin::ModuleStoreHelper
  def index
    @extensions = []
    # if current_site.site_token?
    #   if current_site.store_confirmation
    #     @extensions = get_extensions
    #     @store_confirmation = true
    #   else
    #     @extensions = []
    #     @store_confirmation = false
    #   end
      
    # else
    #   @store_confirmation = true
    #    @extensions = []
    #   @downloaded_extensions = get_downloaded_extension
    # end
  end

  def show
  	@extension = get_extension(params[:id]) rescue nil
  end

  def modules_to_update
    @built_in_extensions = get_built_in_extensions
    render :partial => "modules_to_update"
  end

  def download
    #get extension related values
    extension = get_extension(params[:id]) rescue nil
    extension_name = extension["key"].to_s
    git_repository_url = extension["git_url"]
    tag = extension["tag"]
    module_installed = File.read("downloaded_extensions.rb").include?(extension["key"])

    if module_installed.eql?(false)
      @download_link = "gem '#{extension_name}', :git => '#{git_repository_url}', :tag => '#{tag}'"
      File.open("downloaded_extensions.rb", 'a') do |file|
        file.puts @download_link
      end
    end
    restart
    redirect_to admin_module_store_path
  end

  def toggle_module
  	temp_extensions=File.open("#{Rails.root}/extensions.tmp.rb", 'w')
    extensions = File.new("#{Rails.root}/downloaded_extensions.rb", "r")

    while (extension = extensions.gets)
      if params[:module].any? { |mod|  extension.include?("gem '"+mod+"'")}
        @mod = ModuleApp.where(key: extension.split("'")[1]).first
        if extension.start_with?("# ")
          temp_extensions << extension.gsub("# ","")
          toggle_item(@mod , true)
        else
          temp_extensions << "# "+extension
          toggle_item(@mod , false)
        end
      else
        temp_extensions << extension
      end
    end

    extensions.close
    temp_extensions.close

    FileUtils.mv("#{Rails.root}/extensions.tmp.rb","#{Rails.root}/downloaded_extensions.rb")
    render text: "true"
  end

  def remove_module
    temp_extensions=File.open("#{Rails.root}/extensions.tmp.rb", 'w')
    extensions = File.new("#{Rails.root}/downloaded_extensions.rb", "r")

    while (extension = extensions.gets)
      if extension.include?("gem '"+params[:module]+"'")
        @mod = ModuleApp.where(key: extension.split("'")[1]).first
        toggle_item(@mod , false)
        temp_extensions << ""
      else
        temp_extensions << extension
      end
    end

    extensions.close
    temp_extensions.close

    FileUtils.mv("#{Rails.root}/extensions.tmp.rb","#{Rails.root}/downloaded_extensions.rb")
    restart
    render text: "true"
  end

  def restart_server
    render text: "true"
  end

  def restart
  	Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update && bundle` }
    Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update && bundle` }
    @built_in_extensions = get_built_in_extensions
    render :partial => "modules_to_update"
  	%x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
    sleep 5
  end

  def update_module
    key = params["key"]
    type = params["type"]
    # if type == "built_in"
    #   Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=built_in_extensions.rb bundle update #{key}` }
    # elsif type == "downloaded"
    #   Bundler.with_clean_env { `cd #{Rails.root} && BUNDLE_GEMFILE=downloaded_extensions.rb bundle update #{key}` }
    # end
    Bundler.with_clean_env { `cd #{Rails.root} && bundle update #{key}` }
    render :nothing => true
    %x(kill -s USR2 `cat tmp/pids/unicorn.pid`)
    sleep 5
  end

  protected

  def get_extensions
    extensions = store_session.extensions

    exist_exts = []
    ext_file = File.new("#{Rails.root}/downloaded_extensions.rb", "r")

    while (exist_ext = ext_file.gets)
      status = !exist_ext.start_with?("# ")
      exist_ext = exist_ext.split(',')

      if !extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}.blank?
        extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['installed']=true
        extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['enabled']=status
        extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['installed_version']=exist_ext[2].split(/[\'\"]/)[1]
        if extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['tag'] != exist_ext[2].split(/[\'\"]/)[1]
          extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['updated'] = false
        else
          extensions.select{|ext| ext['key']==exist_ext[0].split(/[\'\"]/)[1]}[0]['updated'] = true
        end
      end
    end

    ext_file.close

    extensions
  end

  def get_extension(id)
    store_session.get_extension(id)
  end

  
  def toggle_item(module_key, active)
    if !module_key.nil?

    end
  end

end