namespace :db do

desc 'test db connection'
task :conntest do
  on roles(:all) do
    stdout = capture DT3MySQL::mysql_execute('SHOW TABLES;')
    if stdout.include? 'denied'
      print "\nNO CORRECT DB CONNECTION. CHECK DB SETTINGS\n\n"
    else
      print "\nCORRECT DB CONNECTION.\n\n"
    end
  end
end

#### LIBRARY TASKS
task :create_dump_dir do
  on roles(:all) do
     execute "cd #{fetch(:deploy_to)}/current && mkdir -p #{TYPO3_DB_DUMP_DIR}"
  end
end
#### END LIBRARY TASKS

desc 'dump a full sql-image'
task :dump do

  invoke 'db:create_dump_dir'

  on roles(:all) do
    execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL::dump_db_version
  end
end

desc 'list dumped sql-images'
task :imglist do
  images_arr = DT3MySQL::db_image_list
  print DT3Div::hashlist_to_table_string(images_arr)
end

desc 'show all tables'
task :tables do
  print("Show tables:\n\n")
  on roles(:all) do
  execute DT3MySQL::show_tables
  end
  print("\n")
end

desc 'dump an sql-image with only the essential tables'
task :dump_essential do

  on roles(:all) do
    table_exclude_list = %w( be_users be_sessions cache_* cf_* fe_session_data fe_sessions static_countries \
      static_country_zones static_currencies static_languages static_territories sys_history sys_log tx_devlog \
      zzz_deleted_* )

    tables = capture DT3MySQL::show_tables
    table_arr = tables.split("\n")

    substr_arr = []
    excltable_arr = []
    realexclude_list = []

    table_exclude_list.each {|excltable|
      if(excltable.include? '*')
        substr_arr << excltable[0,excltable.index('*')]
      else
        excltable_arr << excltable
      end
    }

    table_arr.each {|table|
      if(excltable_arr.include?(table))
        realexclude_list << table
      else
        substr_arr.each {|substr|
          if(table[0,substr.length] == substr)
            realexclude_list << table
          end
        }
      end
    }

    table_exclude_list = realexclude_list.uniq

    execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL::dump_db_version(table_exclude_list)
  end
end

desc 'import one of the sql image into the current database'
task :import do

  images_arr = DT3MySQL::db_image_list
  print DT3Div::hashlist_to_table_string(images_arr)

  print "\nEnter the index of the image you want to import from the list above: "

  imageChoosen = STDIN.gets.chomp
  if imageChoosen=~ /^[0-9]+$/
    imageChoosen = imageChoosen.to_i-1
    if images_arr[(imageChoosen)].nil?
      print "ERR. You must enter an existing index from above."
    else
      print "\nImporting database #{images_arr[imageChoosen]['filename']}\n"

      on roles(:all) do
        execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL.mysql_import(images_arr[imageChoosen]['filename'])
      end

    end
  else
    print "ERR. You must enter a number"
  end
end

desc 'delete all tables'
task :flush do
  print "Flush tables in DB? Enter YES to confirm: "
  cleanConfirm = STDIN.gets.chomp
  if(cleanConfirm.downcase=='yes')
    on roles(:all) do
      tablelist = capture "#{DT3MySQL.create_mysql_base_command} -e \"show tables\" | grep -v Tables_in | grep -v \"+\""
      dropsql = ''
      tablelist.split("\n").each {|table|
        dropsql +="drop table #{table};"
      }
      execute DT3MySQL::mysql_execute(dropsql)

    end
  end
end

end