# frozen_string_literal: true require 'colorize'

namespace :ga_trackable do

# Все таски ga должны зависеть от check_staging, для предотвращения запуска
# в стейджинг-окружении.
task check_staging: :environment do
  if GaTrackable.config.rails_env && GaTrackable.config.rails_env == :staging
    puts 'Запрещен запуск задач GA на стейджинг-сервере.'.red
    exit
  end
end

desc 'Обновить статистику просмотров за сегодняшний день'
task fetch_for_current_day: :check_staging do
  if GaTrackable.config.page_views_entity_fetcher
    GaTrackable::PageViewsFetcher.new.fetch_for_current_day!
  end
  if GaTrackable.config.video_plays_entity_fetcher
    GaTrackable::VideoPlaysFetcher.new.fetch_for_current_day!
  end
end

desc 'Initial fetch'
task initial_fetch: :check_staging do
  if GaTrackable.config.page_views_entity_fetcher
    GaTrackable::PageViewsFetcher.new.send(:initial_fetch!, start_date: 1.year.ago)
  end
  if GaTrackable.config.video_plays_entity_fetcher
    GaTrackable::VideoPlaysFetcher.new.send(:initial_fetch!, start_date: 1.year.ago)
  end
end

desc 'Отобразить детальную информацию по просмотрам страниц'
task get_details_for_page_views: :check_staging do
  path = ENV['path']
  unless path.present?
    puts <<-HERE.strip_heredoc
        Отобразить детальную информацию по просмотрам страниц:
            rake uralok:ga:get_details_for_page_views path=/programs/home-concert1/stories/tomas-live start_date=2014-10-01
            * Параметр start_date не обязателен (по-умолчанию: 1.year.ago).
      HERE
    exit
  end

  f = GaTrackable::PageViewsFetcher.new
  opts = { path: path }
  opts[:start_date] = DateTime.parse(ENV['start_date']) if ENV['start_date'].present?
  data = f.get_details_for opts

  totalUniquePageViews = 0
  totalPageViews = 0
  data.rows.each do |row|
    puts [data.columnHeaders[0].name.rjust(18), row[0]].join(': ')
    puts [data.columnHeaders[1].name.rjust(18), row[1]].join(': ')
    puts [data.columnHeaders[2].name, row[2]].join(': ')
    puts [data.columnHeaders[3].name, row[3]].join(': ')
    totalUniquePageViews += row[2].to_i
    totalPageViews += row[3].to_i
    puts '---'
  end

  puts "Всего уникальных просмотров за выбранный период: #{totalUniquePageViews}".green
  puts "Всего просмотров за выбранный период: #{totalPageViews}".green
end

desc 'Отобразить детальную информацию по просмотрам видео'
task get_details_for_video_plays: :check_staging do
  path = ENV['path']
  unless path.present?
    puts <<-HERE.strip_heredoc
        Отобразить детальную информацию по просмотрам видео:
            rake uralok:ga:get_details_for_video_plays path=/programs/home-concert1/stories/tomas-live start_date=2014-10-01
            * Параметр start_date не обязателен (по-умолчанию: 1.year.ago).
      HERE
    exit
  end

  f = GaTrackable::VideoPlaysFetcher.new
  opts = { path: path }
  opts[:start_date] = DateTime.parse(ENV['start_date']) if ENV['start_date'].present?
  data = f.get_details_for opts

  totalUniqueEvents = 0
  totalEvents = 0
  data.rows.each do |row|
    puts [data.columnHeaders[0].name.rjust(18), row[0]].join(': ')
    puts [data.columnHeaders[1].name.rjust(18), row[1]].join(': ')
    puts [data.columnHeaders[2].name.rjust(18), row[2]].join(': ')
    puts [data.columnHeaders[3].name.rjust(18), row[3]].join(': ')
    puts [data.columnHeaders[4].name.rjust(18), row[4]].join(': ')
    totalUniqueEvents += row[3].to_i
    totalEvents += row[4].to_i
    puts '---'
  end

  puts "Всего уникальных просмотров за выбранный период: #{totalUniqueEvents}".green
  puts "Всего просмотров за выбранный период: #{totalEvents}".green
end

end