require 'net/ssh'
require 'pathname'
namespace :create_site do
  desc "Add cert ver for site"
  task :add_cert_ver_for_site,[:id] => :environment do |task,args|
    begin
      site_construct = SiteConstruct.find(args.id)
      site_server = site_construct.site_server
      if !site_server.nil? && !site_construct.cert_ver_location_path.blank? && !site_construct.cert_ver_file_content.nil?
        @password = site_server.password
        Net::SSH.start(site_server.ip , site_server.account , { password: site_server.password, port: site_server.port}) do |ssh|
          nginx_path = site_construct.nginx_file
          cert_ver_file_content = site_construct.cert_ver_file_content
          location_path = site_construct.cert_ver_location_path
          nginx_config = exec_command_by_user(ssh,"cat #{site_construct.nginx_file}")
          if !site_construct.cert_ver_added_text.nil?
            nginx_config = nginx_config.sub(site_construct.cert_ver_added_text,'')
          end
          file_name = location_path.split('/')[-1]
          file_path = "#{site_construct.path}/#{site_construct.site_name}/tmp/#{file_name}"
          site_construct.cert_ver_added_text = "  location #{location_path}{#add_by_site_module\n    alias #{file_path};\n  }"
          site_construct.save
          server_array = site_construct.parse_nginx_text_to_server_blocks(nginx_config)
          server_array.each do |server|
            tmp = server[0...-1] + site_construct.cert_ver_added_text + "\n}"
            nginx_config = nginx_config.sub(server,tmp)
          end
          cmd = "x='#{cert_ver_file_content}'; echo '#{@password}' | sudo -S sh -c \"echo '$x' > #{file_path}\"; unset x"
          exec_command_by_user(ssh,cmd)

          cmd = "x='#{nginx_config.gsub(/'{1,3}/,"\"\'\"")}'; echo '#{@password}' | sudo -S sh -c \"echo '$x' > #{site_construct.nginx_file}\"; unset x"
          exec_command_by_user(ssh,cmd)
          exec_ssh_command_by_sudo(ssh,"service nginx restart")
        end
      end
    rescue => e
      puts [e,e.backtrace]
    end
  end
end