module Pixways

  def Pixways.valid_json(vari)
    JSON.parse(vari)
    return true
  rescue JSON::ParserError
    return false
  end

  def Pixways.get_pixtech_param_value(pixtech_name,param_name,default_value='')
    PixtechParam.joins(:pixtech).where(pixteches: {name: pixtech_name.partition('_vitrine')[0]}, pixtech_params: {name: param_name}).first.value rescue default_value
  end

  # PixTech author destroy process
  def author_destroy(prov)
    email_subject = "PixTech author destroy - #{prov.name} (#{prov.get_stock_name})"
    email_body = "<h3>Destroy report for PixTech author #{prov.name} (#{prov.get_stock_name})</h3>"

    #PixAdmin steps
    email_body += "<br><h4>Steps on server #{Server.find_by(is_self: true).name}</h4>"

    # user
    if prov.pixtech.name == 'saif'
      prefix_pixtech = 'Saifimages'
    else
      prefix_pixtech = prov.pixtech.name.capitalize
    end
    if prefix_pixtech == prov.pp_string_key
      login = prov.string_key.gsub("#{prov.pp_string_key}_",'')
    else
      login = prov.string_key.gsub("#{prefix_pixtech}_#{prov.pp_string_key}_",'')
    end

    # # Check if author is multistocks, but beware that string_key has changed since PixTech exists : before it was 'Lastname_id' now it is 'Pixtechname_Stockname_Lastname_adhnum'
    # # To catch old string_key cases, we get last name from main contact and get adhnum from provider description
    # author_string_key_case1 = login
    # prov_contact_lastname =  prov.provider_contacts.where(main: 1).first.last_name rescue ''
    # author_string_key_case2 = prov_contact_lastname.blank? ? '' : (prov.description.blank? ? '' : "#{prov_contact_lastname}_#{prov.description}")
    # author_other_stocks = 0
    # author_other_stocks += Provider.where("string_key like '%#{author_string_key_case1}' and pp_string_key != '#{prov.pp_string_key}'").count unless author_string_key_case1.blank?
    # author_other_stocks += Provider.where("string_key like '%#{author_string_key_case2}' and pp_string_key != '#{prov.pp_string_key}'").count unless author_string_key_case2.blank?
    # author_multistocks = author_other_stocks >= 1 ? true : false

    # Better : use description where adhesion number is and is unique
    author_other_stocks = prov.description.blank? ? 0 : Provider.where("description='#{prov.description}' and pp_string_key != '#{prov.pp_string_key}'").count
    author_multistocks = author_other_stocks >= 1 ? true : false

    login = login.downcase

    unless author_multistocks # user and title aren't destroy because author belongs to other stocks

      author_user = User.find_by(login: login)
      if author_user.nil?
        logger.error "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : user with login '#{login}' not found."
        email_body += "<span style='color:red;'>Error : user with login '#{login}' not found.</span><br>"
        #AdminMailer.send_msg(email_subject, email_body).deliver_now
        #return false
      else
        author_title = author_user.title
        author_user.destroy
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : user with login '#{login}' destroyed."
        email_body += "User with login '#{login}' destroyed.<br>"
      end

      # title
      if author_title.nil?
        #ToDo if author_user is nil?
        title_name = "#{prov.pixtech.name.capitalize} #{prov.name}"
        # mail_body << "<span style='color:orange;'>Warning : title with id #{title_id} not found. Looking for title with name '#{title_name}'.</span><br>"
        author_title = Title.find_by(name: title_name)
        if author_title.nil?
          logger.error "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title '#{title_name}' not found."
          email_body += "<span style='color:red;'>Error : title '#{title_name}' not found.</span><br>"
          #AdminMailer.send_msg(email_subject, email_body).deliver_now
          #return false
        else
          tpgn_id = author_title.title_provider_group_name_id
          author_tpgn = author_title.title_provider_group_name
          author_title.destroy
          logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title '#{title_name}' destroyed."
          email_body += "Title '#{title_name}' destroyed.<br>"
        end
      else
        title_name = author_title.name
        tpgn_id = author_title.title_provider_group_name_id
        author_tpgn = author_title.title_provider_group_name
        author_title.destroy
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title '#{title_name}' destroyed"
        email_body += "Title '#{title_name}' destroyed.<br>"
      end

    end

    # tpgn
    if author_tpgn.nil?
      tpgn_name = "0_#{prov.pixtech.name.capitalize}_#{login}"
      author_tpgn = TitleProviderGroupName.find_by(name: tpgn_name)
      if author_tpgn.nil?
        logger.error "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title_provider_group_name '#{tpgn_name}' not found."
        email_body += "<span style='color:red;'>Error : title_provider_group_name '#{tpgn_name}' not found.</span><br>"
        #AdminMailer.send_msg(email_subject, email_body).deliver_now
        #return false
      else
        if author_multistocks
          #remove stock from restrictions group
          author_tpgn.title_provider_groups.where(provider_id: Provider.find_by(string_key: prov.pp_string_key).id).first.destroy
          logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title_provider_group_name '#{tpgn_name}' updated (stock #{prov.pp_string_key} removed)."
          email_body += "Title_provider_group_name '#{tpgn_name}' updated (stock #{prov.pp_string_key} removed).<br>"
        else
          author_tpgn.destroy
          logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title_provider_group_name '#{tpgn_name}' destroyed."
          email_body += "Title_provider_group_name '#{tpgn_name}' destroyed.<br>"
        end
      end
    else
      tpgn_name = author_tpgn.name
      if author_multistocks
        #remove stock from restrictions group
        author_tpgn.title_provider_groups.where(provider_id: Provider.find_by(string_key: prov.pp_string_key).id).first.destroy
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title_provider_group_name '#{tpgn_name}' updated (stock #{prov.pp_string_key} removed)."
        email_body += "Title_provider_group_name '#{tpgn_name}' updated (stock #{prov.pp_string_key} removed).<br>"
      else
        author_tpgn.destroy
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : title_provider_group_name '#{tpgn_name}' destroyed."
        email_body += "Title_provider_group_name '#{tpgn_name}' destroyed.<br>"
      end
    end

    # MS datas
    email_body += "<br><h4>Steps on MS server</h4>"

    # /usr/PPserver/in/ sub folder
    config_db_ms = Rails.configuration.database_configuration['ms_db']
    if config_db_ms.nil?
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : ms_db database configuration doesn't exist."
      email_body += "<span style='color:red;'>ms_db database configuration doesn't exist</span><br>"
    else

      begin
        client = Mysql2::Client.new(host: config_db_ms['host'], database: config_db_ms['database'], username: config_db_ms['username'], password: config_db_ms['password'])
      rescue => e
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while connecting to #{config_db_ms['database']} database on #{config_db_ms["host"]} server."
        email_body += "<span style='color:red;'>Error while connecting to #{config_db_ms['database']} database on #{config_db_ms["host"]} server : #{e}</span><br>"
        client.close if client
        #AdminMailer.send_msg(email_subject, email_body).deliver_now
        #return false
      else
        row_add_prefix =  client.query("SELECT aap_agency_id from AgencyAdditionalPrefix where AgencyAdditionalPrefix.aap_prefix='#{prov.pp_string_key}'")
        if row_add_prefix.count > 0
          agency_id = row_add_prefix.first['aap_agency_id']
          row =  client.query("SELECT inDir_path FROM InputDirectories where InputDirectories.inDir_agencyId=#{agency_id} and inDir_type = 6 limit 1")
        else
          row =  client.query("SELECT inDir_path FROM InputDirectories LEFT JOIN Agences on Agences.id=InputDirectories.inDir_agencyId where Agences.filePrefix='#{prov.pp_string_key}' and inDir_type = 6 limit 1")
        end
        inDir = row.first.nil? ? '' : row.first['inDir_path']
        client.close
        if inDir.blank?
          logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : record not found in tables Agences and InputDirectories : Agences.filePrefix=#{prov.pp_string_key} and InputDirectories.inDir_type = 6."
          email_body += "<span style='color:red;'>Error : record not found in tables Agences and InputDirectories : Agences.filePrefix=#{prov.pp_string_key} and InputDirectories.inDir_type = 6.</span><br>"
          #AdminMailer.send_msg(email_subject, email_body).deliver_now
          #return false
        else
          #inDir.gsub!('/usr/PPserver/', '')
          dossier = "#{inDir}/PHOTOGR38A17PH_#{string_key}"
          begin
            Net::SSH.start('ftp.pixtech.fr', 'pix', password: "JeMetsUneCleSSH") do |ssh|
              ssh.exec("rm -rf #{dossier}")
            end
            logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Folder #{dossier} deleted on MS."
            email_body += "Folder #{dossier} deleted.<br>"
          rescue => e
            logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while deleting folder #{dossier} on MS."
            email_body += "<span style='color:red;'>Error while deleting folder #{dossier} : #{e}</span><br>"
            #AdminMailer.send_msg(email_subject, email_body).deliver_now
            #return false
          end

        end
      end

    end

    # accounts table
    config_ftp_ms = Rails.configuration.database_configuration['ftp_db']
    if config_ftp_ms.nil?
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : ftp_db database configuration doesn't exist."
      email_body += "<span style='color:red;'>ftp_db database configuration doesn't exist</span><br>"
    else
      begin
        client = Mysql2::Client.new(host: config_ftp_ms['host'], database: config_ftp_ms['database'], username: config_ftp_ms['username'], password: config_ftp_ms['password'])
      rescue => e
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while connecting to #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server."
        email_body += "<span style='color:red;'>Error while connecting to #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server : #{e}</span><br>"
        #AdminMailer.send_msg(email_subject, email_body).deliver_now
        #return false
      else
        prefix_pixtech = prov.pixtech.name
        if prefix_pixtech.downcase == prov.pp_string_key.downcase
          ftp_login = "#{prefix_pixtech}_#{login}".downcase
        else
          ftp_login = "#{prefix_pixtech}_#{prov.pp_string_key}_#{login}".downcase
        end
        begin
          res_qry = client.query("select * from accounts where username = '#{ftp_login}'")
          if res_qry.count > 0
            client.query("delete from accounts where username = '#{ftp_login}'")
            logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Record where username = '#{ftp_login}' deleted from accounts table of #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server."
            email_body += "Record where username = '#{ftp_login}' deleted from accounts table of #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server.<br>"
          else
            logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Record where username = '#{ftp_login}' not found into accounts table of #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server."
            email_body += "<span style='color:red;'>Warning : Record where username = '#{ftp_login}' not found into accounts table of #{config_ftp_ms['database']} database on #{config_ftp_ms["host"]} server.</span><br>"
          end
        rescue => e
          logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while deleting record where username = #{ftp_login} in accounts table of #{config_ftp_ms['database']} database, on #{config_ftp_ms["host"]} server."
          email_body += "<span style='color:red;'>Error while deleting record where username = '#{ftp_login}' in accounts table of #{config_ftp_ms['database']} database, on #{config_ftp_ms["host"]} server. Error : #{e}</span><br>"
          #AdminMailer.send_msg(email_subject, email_body).deliver_now
          #return false
        ensure
          client.close
        end
      end
    end

    # Test servers datas
    unless Server.itself?(TEST_SERVER_NAME)
      email_body += "<br><h4>Steps on test servers</h4>"

      # provider
      res_replic = provider_replication_json('destroy', prov.string_key)
      if res_replic == true
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Replication json files sent to test servers."
        email_body += "Replication json files sent to test servers.<br>"
      else
        logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while sending replication json files on test servers."
        email_body += "<span style='color:red;'>Error while sending replication json files on test servers : #{res_replic}</span><br>"
        #AdminMailer.send_msg(email_subject, email_body).deliver_now
        #return false
      end
    end

    # PP2 datas
    email_body += "<br><h4>Steps on PP2 servers</h4>"

    #user
    # pp2a
    res_sys = `ssh pp2a "/var/www/pix/current/script/rails r -e production 'puts User.find_by(login:%(#{login})).destroy'"`
    if !res_sys || res_sys.nil?
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while destroying user with login '#{login}' on pp2a server."
      email_body += "<span style='color:red;'>Error while destroying user with login '#{login}' on pp2a server. Error : #{$?}</span><br>"
    else
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : User with login '#{login}' destroyed on pp2a server."
      email_body += "User with login '#{login}' destroyed on pp2a server.<br>"
    end
    # pp2b
    res_sys = `ssh pp2b "/var/www/pix/current/script/rails r -e production 'puts User.find_by(login:%(#{login})).destroy'"`
    if !res_sys || res_sys.nil?
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : Error while destroying user with login '#{login}' on pp2b server."
      email_body += "<span style='color:red;'>Error while destroying user with login '#{login}' on pp2b server. Error : #{$?}</span><br>"
    else
      logger.info "[#{Time.now().strftime("%Y-%m-%d %H:%M:%S")}] PixTech author destroy process : User with login '#{login}' destroyed on pp2b server."
      email_body += "User with login '#{login}' destroyed on pp2b server.<br>"
    end


    # All pictures deletion: author ones and PP and PP2 stock ones
    email_body += "<br><h4>Last step : PP and PP2 pictures deletion</h4>"

    images_list = []
    prov_images = prov.images
    unless prov_images.blank?
      email_body += "#{prov_images.count} pictures to delete.<br>"
      prov_images.each do |im| # Be careful if too many pictures?
        # Problem with pictures on PP2, so that can't be found on PixAdmin
        # image_pp = Image.joins(:provider).where(original_filename: im.original_filename, providers: {string_key: im.provider.pp_string_key}).first
        # images_list << image_pp.file_name unless image_pp.nil?
        images_list << im.file_name
        images_list << im.provider.pp_string_key+"."+im.provider.string_key.downcase.partition("#{im.provider.pp_string_key.downcase}_")[2]+"_"+im.file_name.sub("#{im.provider.string_key}.",'') #file_name with author prefix included in the name, after agency prefix (new process)
        images_list << im.provider.pp_string_key+"."+im.provider.string_key+"_"+im.file_name.sub("#{im.provider.string_key}.",'') #Christophel PixTech
        images_list << "#{im.provider.pp_string_key}#{im.file_name.sub(im.provider.string_key,'')}" #file_name with only agency prefix (like old Saif authors or PixTech without author buttons like MYOP)
      end
      image_deletion(images_list,prov.string_key,server_dest='all')
    end


    # Send report
    email_body += "<br>"
    AdminMailer.send_msg(email_subject,email_body,'html').deliver_now

  end

  # send json file to test servers to replicate PixTech author provider
  def provider_replication_json(operation, s_k, name='', pp_name='', coprule='', pp_string_key='', description='', pixtechname=nil, provtype=1, local=1)
    vars = {}
    case operation
    when 'create'
      vars["name"] = name
      vars["pp_name"] = pp_name
      vars["string_key"] = s_k
      vars["pp_string_key"] = pp_string_key
      vars["copyright_rule"] = coprule
      vars["description"] = description
      vars["pixtech_name"] = pixtechname
      vars["provider_type_id"] = provtype
      vars["local"] = local
      vars["country"] = 'France'
    when 'destroy'
      vars["string_key"] = s_k
    else
      vars["name"] = name
      vars["pp_name"] = pp_name
      vars["string_key"] = s_k
      vars["pp_string_key"] = pp_string_key
      vars["copyright_rule"] = coprule
      vars["description"] = description
      vars["pixtech_name"] = pixtechname
      vars["provider_type_id"] = provtype
      vars["local"] = local
      vars["country"] = 'France'
    end
    json_vars = vars.to_json
    json_filename = "pixtech_author_#{operation}_#{s_k}.json"
    File.open("/tmp/"+json_filename,'wb') do |f|
      f.write(json_vars)
    end
    scp_config = YAML.load_file(File.join(Rails.root, 'config', 'scp_ssh.yml'))
    scp_success = true
    scp_error = ''

    begin
      Net::SCP.upload!(scp_config[:test][:host], scp_config[:test][:user],"/tmp/#{json_filename}","/var/www/pix/current/public/pixtech_authors/#{json_filename}")
    rescue => e
      scp_error += "Error while sending file /tmp/#{json_filename} to /var/www/pix/current/public/pixtech_authors/ on server #{scp_config[:test][:host]} : #{e}\n"
      scp_success &&= false
    end

    begin
      Net::SCP.upload!(scp_config[:test_v4][:host], scp_config[:test_v4][:user],"/tmp/#{json_filename}","/var/www/pix/current/public/pixtech_authors/#{json_filename}")
    rescue => e
      scp_error += "Error while sending file /tmp/#{json_filename} to /var/www/pix/current/public/pixtech_authors/ on server #{scp_config[:test][:host]} : #{e}"
      scp_success &&= false
    end

    File.delete("/tmp/"+json_filename) if scp_success

    return scp_success ? scp_success : scp_error
  end

  # Retrieve number of pictures for a given provider from a remote server
  def Pixways.count_prov_pictures(server_url, prov_stringkey='')
    begin
      res = RestClient::Request.execute(
        method: :get,
        url: URI.encode("#{server_url}pictures_count".strip),
        open_timeout: 5,
        read_timeout: 5,
        ssl_timeout: 5,
        timeout: 5,
        payload: {prov: prov_stringkey},
        content_type: :json,
        accept: :json
      )
    rescue => e
      Rails.logger.info"**** rescue #{e.inspect}"
      pp_res = "Erreur"
    end
    unless pp_res == "Erreur"
      if Pixways.valid_json(res.body)
        retour = JSON.parse(res.body)
        pp_res = retour["result"]
      else
        pp_res = "Erreur"
      end
    end
    pp_res == "Erreur" ? '' : pp_res.to_i
  end

  def image_deletion(imgs,titlename,server_dest='',send_to_pp2=false,field='file_name',stringkey='')

    local_tmp_path = (Server.itself?(PIXADMIN_SERVER_NAME) || Server.itself?(PP2_SERVER_NAME) || Server.itself?(PIXTRAKK_SERVER_NAME)) ? '/home/pix/support/tmp/' : '/tmp/'
    capistrano_path = '/home/pix/capistrano/pixways/'
    logs_path = "/var/log/pixways/delete_images/#{Time.now.strftime('%Y%m%d')}/"

    base_name = "#{Time.now.strftime('%Y-%m-%d-%Hh%Mm%S')}_#{titlename}"
    file_name = "#{base_name}.txt"
    main_log_file_name="#{logs_path}#{base_name}_main.log"
    main_error_log_file_name="#{logs_path}#{base_name}_main.error-log"
    pictures_list = "#{local_tmp_path}#{file_name}"
    ini_file = "#{local_tmp_path}#{base_name}.ini"

    File.open(pictures_list,'wb') do |f|
      imgs.each do |i|
        f.write("#{i}\n")
      end
    end

    #create logs folder if doesn't exist and call local delete command
    sk_option_pa = stringkey.blank? ? '' : "-s stringkey=#{stringkey}"
    sk_option = stringkey.blank? ? '' : "-p #{stringkey}"
    field_option_pa = field.blank? ? '' : "-s field=#{field}"
    field_option = field.blank? ? '' : "-f #{field}"
    send_to_pp2_option_pa = send_to_pp2 ? '-s opts=-S' : ''
    if Server.itself?(PIXADMIN_SERVER_NAME)
      case server_dest
      when '','pp1'
        delete_command = "mkdir -p #{logs_path};#{capistrano_path}ultra_cap_delete.sh 'pixpalace:pictures_deletion #{send_to_pp2_option_pa} #{field_option_pa} #{sk_option_pa} -s pictures_list=#{pictures_list}' 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}"
      when 'all'
        delete_command = "mkdir -p #{logs_path};#{capistrano_path}ultra_cap_delete.sh 'pixpalace:pictures_deletion #{field_option_pa} #{sk_option_pa} -s pictures_list=#{pictures_list}' 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}"
        delete_command += "; ssh pp2a 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2a:#{local_tmp_path}; ssh pp2a 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
        delete_command += "; ssh pp2b 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2b:#{local_tmp_path}; ssh pp2b 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      when 'pp2'
        delete_command = "ssh pp2a 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2a:#{local_tmp_path}; ssh pp2a 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
        delete_command += "; ssh pp2b 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2b:#{local_tmp_path}; ssh pp2b 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      end
    elsif Server.itself?(VINGTMINUTES_SERVER_NAME)
      delete_command = "scp #{pictures_list} pixtech20min1:/tmp/; ssh pixtech20min1 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} /tmp/#{file_name} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      delete_command += ";scp #{pictures_list} pixtech20min2:/tmp/; ssh pixtech20min2 'mkdir -p #{logs_path};/var/www/v2/current/tools/delete_images #{field_option} #{sk_option} /tmp/#{file_name} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
    elsif Server.itself?(PP2_SERVER_NAME)
      delete_command = "ssh pp2a 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2a:#{local_tmp_path}; ssh pp2a 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      delete_command += "; ssh pp2b 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} pp2b:#{local_tmp_path}; ssh pp2b 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
    elsif Server.itself?(PIXTRAKK_SERVER_NAME)
      delete_command = "ssh #{PTVISU1_FQDN} 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} #{PTVISU1_FQDN}:#{local_tmp_path}; ssh #{PTVISU1_FQDN} 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images -f ms_image_id #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      delete_command += "; ssh #{PTVISU2_FQDN} 'mkdir -p #{local_tmp_path}'; scp #{pictures_list} #{PTVISU2_FQDN}:#{local_tmp_path}; ssh #{PTVISU2_FQDN} 'mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images -f ms_image_id #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}'"
      deletion_json(imgs)
    else
      delete_command = "mkdir -p #{logs_path};/var/www/pix/current/tools/delete_images #{field_option} #{sk_option} #{pictures_list} 1>>#{main_log_file_name} 2>>#{main_error_log_file_name}"
    end

    File.open(ini_file,'wb') do |f|
      f.write(delete_command)
    end

    #execute the command as a background task
    pid = Process.spawn("at -f #{ini_file} now")
    #Process.detach(pid)

  end

  # User functions
  def roles_mask_value(role_name)
    2**User::ROLES_MASK.index(role_name)
  end

  def roles_mask_name(role_value)
    I18n.t("roles.#{User::ROLES_MASK[Math.log2(role_value)]}")
  end


  #output debug log format
  def debug_log(text,value=nil)
    highlight_str = '*****************'
    value_str = value.nil? ? '' : ": #{value}"
    logger.warn"#{highlight_str} #{text} #{value_str}"
  end

end